165 lines
3.9 KiB
NASM
165 lines
3.9 KiB
NASM
page ,132
|
|
|
|
if 0
|
|
/*++
|
|
|
|
Copyright (c) 1991 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
int2a.asm
|
|
|
|
Abstract:
|
|
|
|
This module contains the int 2a handler for the NT VDM redir TSR
|
|
|
|
Author:
|
|
|
|
Richard L Firth (rfirth) 29-Oct-1991
|
|
|
|
Environment:
|
|
|
|
Dos mode only
|
|
|
|
Revision History:
|
|
|
|
05-Sep-1991 rfirth
|
|
Created
|
|
|
|
--*/
|
|
endif
|
|
|
|
|
|
|
|
.xlist
|
|
.xcref
|
|
include rdrsvc.inc ; SVC
|
|
include debugmac.inc ; debug display macros
|
|
include segorder.inc ; load order of 'redir' segments
|
|
.cref
|
|
.list
|
|
|
|
|
|
|
|
.286 ; all code in this module 286 compatible
|
|
|
|
|
|
|
|
ResidentCodeStart
|
|
assume cs:ResidentCode
|
|
assume ds:nothing
|
|
assume es:nothing
|
|
assume ss:nothing
|
|
|
|
public Old2aHandler
|
|
Old2aHandler dd ?
|
|
|
|
; *** Int2aHandler
|
|
; *
|
|
; * Handles int 2a requests, in which we pretend to be minses and any
|
|
; * other missing parts of the net stack
|
|
; *
|
|
; * ENTRY function code in ah:
|
|
; * ah = 0, return ah = 1
|
|
; * ah = 1, Cooked NetBIOS call
|
|
; * ah = 4, al = 0, same as ah = 1
|
|
; * al = 1, Raw NetBIOS call
|
|
; * al = 2, unknown function; we don't handle it
|
|
; * See doslan\minses\int2a.inc in LANMAN
|
|
; * project for details
|
|
; * ah = 5, Get Adapter Resources. Returns in CX number of
|
|
; * available NCBs and in DX the number of available
|
|
; * sessions. We don't (as yet) handle this
|
|
; *
|
|
; * es:bx = NCB
|
|
; *
|
|
; * EXIT See above
|
|
; *
|
|
; * USES ax, flags
|
|
; *
|
|
; * ASSUMES nothing
|
|
; *
|
|
; ***
|
|
|
|
public Int2aHandler
|
|
Int2aHandler proc near
|
|
or ah,ah ; installation check
|
|
jz increment_ah_and_return
|
|
|
|
;
|
|
; not installation. Check for cooked/raw netbios calls
|
|
;
|
|
|
|
cmp ah,1
|
|
je cooked
|
|
cmp ah,4
|
|
je cooked_or_raw
|
|
cmp ah,5
|
|
je get_adapter_resources
|
|
|
|
;DbgPrintString "Int2aHandler: unrecognized request: "
|
|
;DbgPrintHexWord ax
|
|
;DbgCrLf
|
|
|
|
;
|
|
; the call is not for us - chain to the next Int 2A handler
|
|
;
|
|
|
|
chain_next_handler:
|
|
DbgUnsupported
|
|
jmp Old2aHandler
|
|
|
|
|
|
cooked_or_raw:
|
|
or al,al ; ax = 0x0400?
|
|
jz cooked ; yes - cooked
|
|
cmp al,1 ; ax = 0x0401?
|
|
je raw ; yes - raw
|
|
cmp al,2 ; ax = 0x0402?
|
|
jne chain_next_handler ; yes - same as raw; no - chain next
|
|
|
|
;
|
|
; raw request: just call NetBios via INT 5C and set ah dependent upon whether
|
|
; an error was returned from NetBios
|
|
;
|
|
|
|
raw: int 5ch
|
|
sub ah,ah
|
|
or al,al
|
|
jz @f
|
|
|
|
increment_ah_and_return:
|
|
inc ah
|
|
@@: iret
|
|
|
|
get_adapter_resources:
|
|
mov ax,1
|
|
mov bx,16
|
|
mov cx,128
|
|
mov dx,64
|
|
iret
|
|
|
|
;
|
|
; 'cooked' call: this tries to convert synchronous NetBios calls to asynchronous
|
|
; then spins & beeps until the command has completed. Some commands are retried
|
|
; for a certain time or number of retries
|
|
;
|
|
|
|
;
|
|
; there is no justification for doing the 'cooked' processing that MINSES proper
|
|
; performs: The cooked processing is mainly to give the poor DOS user peace of
|
|
; mind when his machine seems dead, by occasionally beeping in a meaningful
|
|
; manner. Since we can terminate DOS sessions with impunity, there seems little
|
|
; point in letting the user know the machine is still alive, or retrying commands
|
|
; for that matter. However, that may change...
|
|
;
|
|
|
|
cooked:
|
|
DbgUnsupported
|
|
jmp short raw ; fudge it for now
|
|
|
|
Int2aHandler endp
|
|
|
|
ResidentCodeEnd
|
|
end
|