.xlist
include kernel.inc
include pdb.inc
include tdb.inc
.list

DataBegin

externW curTDB

DataEnd

sBegin  CODE
externD prevInt10proc
assumes CS,CODE
assumes	ds, nothing
assumes	es, nothing

;-----------------------------------------------------------------------;
; IntnnHandlers - Handlers for int 0, 2, 4, 6, 7, 10, 3E, 75		;
;									;
; Slimed in here for lack of a better place.				;
; Merely jump through the vector saved in the TDB			;
;									;
;-----------------------------------------------------------------------;

cProc	Int00Handler,<PUBLIC,FAR>
cBegin nogen
	push	bx
	mov	bx, TDB_INTVECS
IntnnCommon:
	sub	sp, 2			; Make room for dword (saved bx is
	push	bp			;		       other word)
	mov	bp, sp
	push	ds

	SetKernelDS
	mov	ds, CurTDB
	UnSetKernelDS
	push	[bx]			; Fill in dword with vector contents
	pop	[bp+2]
	mov	bx, [bx+2]
	xchg	bx, [bp+4]		; Fill in segment, recover bx
	pop	ds
	pop	bp
	retf
cEnd nogen

cProc	Int02Handler,<PUBLIC,FAR>
cBegin nogen
	push	bx
	mov	bx, TDB_INTVECS+4
	jmps	IntnnCommon
cEnd nogen

cProc	Int04Handler,<PUBLIC,FAR>
cBegin nogen
	push	bx
	mov	bx, TDB_INTVECS+8
	jmps	IntnnCommon
cEnd nogen

cProc	Int06Handler,<PUBLIC,FAR>
cBegin nogen
	push	bx
	mov	bx, TDB_INTVECS+12
	jmps	IntnnCommon
cEnd nogen

cProc	Int07Handler,<PUBLIC,FAR>
cBegin nogen
	push	bx
	mov	bx, TDB_INTVECS+16
	jmps	IntnnCommon
cEnd nogen

cProc	Int3EHandler,<PUBLIC,FAR>
cBegin nogen
	push	bx
	mov	bx, TDB_INTVECS+20
	jmps	IntnnCommon
cEnd nogen

cProc	Int75Handler,<PUBLIC,FAR>
cBegin nogen
	push	bx
	mov	bx, TDB_INTVECS+24
	jmps	IntnnCommon
cEnd nogen

ifdef WOW

cProc   Int10Handler,<PUBLIC,FAR>

;; QuattroPro for windows does direct VGA programming if they detect
;; that the monitor they are running on is a VGA.   On NT if they program
;; the VGA we trap all the operations in NTVDM - but it makes QuattroPro
;; look very slow.   So we lie to them here bl = 0 No monitor.   That way
;; they don't do direct VGA programming and run fast.
;;       - mattfe june 93
;;
;; if function == 1h (get monitor type)
;;      then return 0 - No monitor
;; else
;;      chain into real int10 handler

cBegin nogen
        cmp     ah,1ah
        jne     int10h_dontbother

        mov     bl,00h
        IRET

int10h_dontbother:
        jmp     cs:prevInt10proc
cEnd nogen

endif; WOW

;-----------------------------------------------------------------------;
; FOR INT HANDLER	SEE						;
;									;
;	21h		i21entry.asm					;
;	3Fh		ldint.asm					;
;									;
;-----------------------------------------------------------------------;


sEnd	CODE

end