mirror of
https://github.com/WindowsNT351/CE-Collections.git
synced 2025-12-26 17:10:25 +08:00
1084 lines
26 KiB
Plaintext
1084 lines
26 KiB
Plaintext
; Static Name Aliases
|
|
;
|
|
TITLE xmsapi.c
|
|
.286p
|
|
.287
|
|
INCLUDELIB SLIBCE
|
|
INCLUDELIB OLDNAMES.LIB
|
|
_TEXT SEGMENT WORD PUBLIC 'CODE'
|
|
_TEXT ENDS
|
|
_DATA SEGMENT WORD PUBLIC 'DATA'
|
|
_DATA ENDS
|
|
CONST SEGMENT WORD PUBLIC 'CONST'
|
|
CONST ENDS
|
|
_BSS SEGMENT WORD PUBLIC 'BSS'
|
|
_BSS ENDS
|
|
$$SYMBOLS SEGMENT BYTE PUBLIC 'DEBSYM'
|
|
$$SYMBOLS ENDS
|
|
$$TYPES SEGMENT BYTE PUBLIC 'DEBTYP'
|
|
$$TYPES ENDS
|
|
DGROUP GROUP CONST, _BSS, _DATA
|
|
ASSUME DS: DGROUP, SS: DGROUP
|
|
PUBLIC _XMSControl
|
|
PUBLIC _XmsErrorMessages
|
|
_DATA SEGMENT
|
|
_XMSControl DD 00H
|
|
$SG215 DB 'Success', 00H
|
|
$SG216 DB 'Not implemented', 00H
|
|
$SG217 DB 'VDISK detected', 00H
|
|
$SG218 DB 'A20 error', 00H
|
|
$SG219 DB 'No HMA', 00H
|
|
$SG220 DB 'HMA in use', 00H
|
|
$SG221 DB 'HMA denied', 00H
|
|
$SG222 DB 'HMA not allocated', 00H
|
|
$SG223 DB 'A20 still enabled', 00H
|
|
$SG224 DB 'No free extended memory', 00H
|
|
$SG225 DB 'No free handles', 00H
|
|
$SG226 DB 'Invalid handle', 00H
|
|
$SG227 DB 'Invalid source handle', 00H
|
|
$SG228 DB 'Invalid source offset', 00H
|
|
$SG229 DB 'Invalid destination handle', 00H
|
|
$SG230 DB 'Invalid destination offset', 00H
|
|
$SG231 DB 'Invalid length', 00H
|
|
$SG232 DB 'Invalid overlap', 00H
|
|
$SG233 DB 'Parity error', 00H
|
|
$SG234 DB 'Block locked', 00H
|
|
$SG235 DB 'Handle locked', 00H
|
|
$SG236 DB 'Lock count overflow', 00H
|
|
$SG237 DB 'Lock failed', 00H
|
|
$SG238 DB 'Smaller UMB available', 00H
|
|
$SG239 DB 'No UMBs available', 00H
|
|
$SG240 DB 'Invalid UMB segment', 00H
|
|
_XmsErrorMessages DW 00H
|
|
DW DGROUP:$SG215
|
|
DW 080H
|
|
DW DGROUP:$SG216
|
|
DW 081H
|
|
DW DGROUP:$SG217
|
|
DW 082H
|
|
DW DGROUP:$SG218
|
|
DW 090H
|
|
DW DGROUP:$SG219
|
|
DW 091H
|
|
DW DGROUP:$SG220
|
|
DW 092H
|
|
DW DGROUP:$SG221
|
|
DW 093H
|
|
DW DGROUP:$SG222
|
|
DW 094H
|
|
DW DGROUP:$SG223
|
|
DW 0a0H
|
|
DW DGROUP:$SG224
|
|
DW 0a1H
|
|
DW DGROUP:$SG225
|
|
DW 0a2H
|
|
DW DGROUP:$SG226
|
|
DW 0a3H
|
|
DW DGROUP:$SG227
|
|
DW 0a4H
|
|
DW DGROUP:$SG228
|
|
DW 0a5H
|
|
DW DGROUP:$SG229
|
|
DW 0a6H
|
|
DW DGROUP:$SG230
|
|
DW 0a7H
|
|
DW DGROUP:$SG231
|
|
DW 0a8H
|
|
DW DGROUP:$SG232
|
|
DW 0a9H
|
|
DW DGROUP:$SG233
|
|
DW 0aaH
|
|
DW DGROUP:$SG234
|
|
DW 0abH
|
|
DW DGROUP:$SG235
|
|
DW 0acH
|
|
DW DGROUP:$SG236
|
|
DW 0adH
|
|
DW DGROUP:$SG237
|
|
DW 0b0H
|
|
DW DGROUP:$SG238
|
|
DW 0b1H
|
|
DW DGROUP:$SG239
|
|
DW 0b2H
|
|
DW DGROUP:$SG240
|
|
$SG316 DB 'Unknown error', 00H
|
|
_DATA ENDS
|
|
_TEXT SEGMENT
|
|
ASSUME CS: _TEXT
|
|
PUBLIC _XmsIsInstalled
|
|
_XmsIsInstalled PROC NEAR
|
|
;|*** //
|
|
;|*** // Copyright (c) Microsoft Corporation. All rights reserved.
|
|
;|*** //
|
|
;|*** //
|
|
;|*** // Use of this sample source code is subject to the terms of the Microsoft
|
|
;|*** // license agreement under which you licensed this sample source code. If
|
|
;|*** // you did not accept the terms of the license agreement, you are not
|
|
;|*** // authorized to use this sample source code. For the terms of the license,
|
|
;|*** // please see the license agreement between you and Microsoft or, if applicable,
|
|
;|*** // see the LICENSE.RTF on your install media or the root of your tools installation.
|
|
;|*** // THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
|
|
;|*** //
|
|
;|*** /*++
|
|
;|*** THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|
|
;|*** ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
|
;|*** THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
;|*** PARTICULAR PURPOSE.
|
|
;|***
|
|
;|*** Module Name:
|
|
;|***
|
|
;|*** Abstract:
|
|
;|***
|
|
;|*** Functions:
|
|
;|***
|
|
;|***
|
|
;|*** Notes:
|
|
;|***
|
|
;|*** --*/
|
|
;|***
|
|
;|*** #include "xmsapi.h"
|
|
;|***
|
|
;|*** #pragma warning(disable:4704)
|
|
;|***
|
|
;|*** #pragma pack(1)
|
|
;|***
|
|
;|*** typedef struct _EXTENDED_MEMORY_MOVE
|
|
;|*** {
|
|
;|*** unsigned long ulLength;
|
|
;|*** unsigned int uiSourceHandle;
|
|
;|*** unsigned long ulSourceOffset;
|
|
;|*** unsigned int uiDestinationHandle;
|
|
;|*** unsigned long ulDestinationOffset;
|
|
;|***
|
|
;|*** } EXTENDED_MEMORY_MOVE, *PEXTENDED_MEMORY_MOVE;
|
|
;|***
|
|
;|*** #pragma pack()
|
|
;|***
|
|
;|*** int (far * XMSControl)() = 0;
|
|
;|***
|
|
;|*** struct
|
|
;|*** {
|
|
;|*** int iErrorCode;
|
|
;|*** char * pszErrorString;
|
|
;|*** }
|
|
;|*** XmsErrorMessages[] =
|
|
;|*** {
|
|
;|*** { XMS_SUCCESS, "Success" },
|
|
;|***
|
|
;|*** { XMS_E_NOT_IMPLEMENTED, "Not implemented" },
|
|
;|*** { XMS_E_VDISK_DETECTED, "VDISK detected" },
|
|
;|*** { XMS_E_A20_ERROR, "A20 error" },
|
|
;|***
|
|
;|*** { XMS_W_NO_HMA, "No HMA" },
|
|
;|*** { XMS_W_HMA_IN_USE, "HMA in use" },
|
|
;|*** { XMS_W_HMA_DENIED, "HMA denied" },
|
|
;|*** { XMS_W_HMA_NOT_ALLOCATED, "HMA not allocated" },
|
|
;|*** { XMS_W_A20_STILL_ENABLED, "A20 still enabled" },
|
|
;|***
|
|
;|*** { XMS_S_NO_FREE_EXTENDED_MEMORY, "No free extended memory" },
|
|
;|*** { XMS_S_NO_FREE_HANDLES, "No free handles" },
|
|
;|*** { XMS_S_INVALID_HANDLE, "Invalid handle" },
|
|
;|*** { XMS_S_INVALID_SOURCE_HANDLE, "Invalid source handle" },
|
|
;|*** { XMS_S_INVALID_SOURCE_OFFSET, "Invalid source offset" },
|
|
;|*** { XMS_S_INVALID_DESTINATION_HANDLE, "Invalid destination handle" },
|
|
;|*** { XMS_S_INVALID_DESTINATION_OFFSET, "Invalid destination offset" },
|
|
;|*** { XMS_S_INVALID_LENGTH, "Invalid length" },
|
|
;|*** { XMS_S_INVALID_OVERLAP, "Invalid overlap" },
|
|
;|*** { XMS_S_PARITY_ERROR, "Parity error" },
|
|
;|*** { XMS_S_BLOCK_LOCKED, "Block locked" },
|
|
;|*** { XMS_S_HANDLE_LOCKED, "Handle locked" },
|
|
;|*** { XMS_S_LOCK_COUNT_OVERFLOW, "Lock count overflow" },
|
|
;|*** { XMS_S_LOCK_FAILED, "Lock failed" },
|
|
;|***
|
|
;|*** { XMS_I_SMALLER_UMB_AVAILABLE, "Smaller UMB available" },
|
|
;|*** { XMS_I_NO_UMBS_AVAILABLE, "No UMBs available" },
|
|
;|*** { XMS_I_INVALID_UMB_SEGMENT, "Invalid UMB segment" }
|
|
;|*** };
|
|
;|***
|
|
;|*** #define N_XMS_ERROR_MESSAGES (sizeof(XmsErrorMessages) / sizeof(XmsErrorMessages[0]))
|
|
;|***
|
|
;|*** int
|
|
;|*** XmsIsInstalled()
|
|
;|*** {
|
|
; Line 93
|
|
*** 000000 c8 02 00 00 enter 2,0
|
|
; bInstalled = -2
|
|
;|*** int bInstalled = 0;
|
|
; Line 94
|
|
*** 000004 c7 46 fe 00 00 mov WORD PTR [bp-2],0 ;bInstalled
|
|
;|***
|
|
;|*** if (XMSControl != 0)
|
|
; Line 96
|
|
*** 000009 a1 02 00 mov ax,WORD PTR _XMSControl+2
|
|
*** 00000c 0b 06 00 00 or ax,WORD PTR _XMSControl
|
|
*** 000010 74 06 je $I243
|
|
;|*** {
|
|
;|*** return 1;
|
|
; Line 98
|
|
*** 000012 b8 01 00 mov ax,1
|
|
*** 000015 c9 leave
|
|
*** 000016 c3 ret
|
|
*** 000017 90 nop
|
|
;|*** }
|
|
;|***
|
|
;|*** _asm
|
|
; Line 101
|
|
$I243:
|
|
;|*** {
|
|
;|*** mov ax,4300h ; Check if XMS is present)
|
|
; Line 103
|
|
*** 000018 b8 00 43 mov ax,17152 ;4300H
|
|
;|*** int 2Fh
|
|
; Line 104
|
|
*** 00001b cd 2f int 47 ;002fH
|
|
;|*** xor ah,ah
|
|
; Line 105
|
|
*** 00001d 32 e4 xor ah,ah
|
|
;|*** cmp al,80h
|
|
; Line 106
|
|
*** 00001f 3c 80 cmp al,128 ;0080H
|
|
;|*** jne done ; Nope - no point in continuing
|
|
; Line 107
|
|
*** 000021 75 10 jne $done244
|
|
;|***
|
|
;|*** mov ax,4310h ; Get XMS entry point
|
|
; Line 109
|
|
*** 000023 b8 10 43 mov ax,17168 ;4310H
|
|
;|*** int 2Fh
|
|
; Line 110
|
|
*** 000026 cd 2f int 47 ;002fH
|
|
;|*** mov WORD PTR [XMSControl], bx ; Save entry point
|
|
; Line 111
|
|
*** 000028 89 1e 00 00 mov WORD PTR _XMSControl,bx
|
|
;|*** mov WORD PTR [XMSControl + 2], es
|
|
; Line 112
|
|
*** 00002c 8c 06 02 00 mov WORD PTR _XMSControl+2,es
|
|
;|***
|
|
;|*** inc bInstalled ; Indicate installed
|
|
; Line 114
|
|
*** 000030 ff 46 fe inc WORD PTR [bp-2] ;bInstalled
|
|
;|*** }
|
|
; Line 115
|
|
;|***
|
|
;|*** done:
|
|
; Line 117
|
|
$done244:
|
|
;|*** return bInstalled;
|
|
; Line 118
|
|
*** 000033 8b 46 fe mov ax,WORD PTR [bp-2] ;bInstalled
|
|
;|*** }
|
|
; Line 119
|
|
*** 000036 c9 leave
|
|
*** 000037 c3 ret
|
|
|
|
_XmsIsInstalled ENDP
|
|
PUBLIC _XmsLocalEnableA20
|
|
_XmsLocalEnableA20 PROC NEAR
|
|
;|***
|
|
;|*** int
|
|
;|*** XmsLocalEnableA20()
|
|
;|*** {
|
|
; Line 123
|
|
*** 000038 c8 02 00 00 enter 2,0
|
|
; xmsError = -2
|
|
;|*** int xmsError = XMS_SUCCESS;
|
|
; Line 124
|
|
*** 00003c c7 46 fe 00 00 mov WORD PTR [bp-2],0 ;xmsError
|
|
;|***
|
|
;|*** if (!XmsIsInstalled())
|
|
; Line 126
|
|
*** 000041 e8 bc ff call _XmsIsInstalled
|
|
*** 000044 0b c0 or ax,ax
|
|
*** 000046 75 06 jne $I247
|
|
;|*** {
|
|
;|*** return XMS_E_NOT_IMPLEMENTED;
|
|
; Line 128
|
|
*** 000048 b8 80 00 mov ax,128 ;0080H
|
|
*** 00004b c9 leave
|
|
*** 00004c c3 ret
|
|
*** 00004d 90 nop
|
|
;|*** }
|
|
;|***
|
|
;|*** _asm
|
|
; Line 131
|
|
$I247:
|
|
;|*** {
|
|
;|*** mov ah, 05h
|
|
; Line 133
|
|
*** 00004e b4 05 mov ah,5
|
|
;|*** call [XMSControl]
|
|
; Line 134
|
|
*** 000050 ff 1e 00 00 call DWORD PTR _XMSControl
|
|
;|*** clc
|
|
; Line 135
|
|
*** 000054 f8 clc
|
|
;|*** rcr al, 1
|
|
; Line 136
|
|
*** 000055 d0 d8 rcr al,1
|
|
;|*** jc done
|
|
; Line 137
|
|
*** 000057 72 05 jb $done248
|
|
;|***
|
|
;|*** xor bh, bh
|
|
; Line 139
|
|
*** 000059 32 ff xor bh,bh
|
|
;|*** mov xmsError, bx
|
|
; Line 140
|
|
*** 00005b 89 5e fe mov WORD PTR [bp-2],bx ;xmsError
|
|
;|*** }
|
|
; Line 141
|
|
;|***
|
|
;|*** done:
|
|
; Line 143
|
|
$done248:
|
|
;|*** return xmsError;
|
|
; Line 144
|
|
*** 00005e 8b 46 fe mov ax,WORD PTR [bp-2] ;xmsError
|
|
;|*** }
|
|
; Line 145
|
|
*** 000061 c9 leave
|
|
*** 000062 c3 ret
|
|
*** 000063 90 nop
|
|
|
|
_XmsLocalEnableA20 ENDP
|
|
PUBLIC _XmsLocalDisableA20
|
|
_XmsLocalDisableA20 PROC NEAR
|
|
;|***
|
|
;|*** int
|
|
;|*** XmsLocalDisableA20()
|
|
;|*** {
|
|
; Line 149
|
|
*** 000064 c8 02 00 00 enter 2,0
|
|
; xmsError = -2
|
|
;|*** int xmsError = XMS_SUCCESS;
|
|
; Line 150
|
|
*** 000068 c7 46 fe 00 00 mov WORD PTR [bp-2],0 ;xmsError
|
|
;|***
|
|
;|*** if (!XmsIsInstalled())
|
|
; Line 152
|
|
*** 00006d e8 90 ff call _XmsIsInstalled
|
|
*** 000070 0b c0 or ax,ax
|
|
*** 000072 75 06 jne $I251
|
|
;|*** {
|
|
;|*** return XMS_E_NOT_IMPLEMENTED;
|
|
; Line 154
|
|
*** 000074 b8 80 00 mov ax,128 ;0080H
|
|
*** 000077 c9 leave
|
|
*** 000078 c3 ret
|
|
*** 000079 90 nop
|
|
;|*** }
|
|
;|***
|
|
;|*** _asm
|
|
; Line 157
|
|
$I251:
|
|
;|*** {
|
|
;|*** mov ah, 06h
|
|
; Line 159
|
|
*** 00007a b4 06 mov ah,6
|
|
;|*** call [XMSControl]
|
|
; Line 160
|
|
*** 00007c ff 1e 00 00 call DWORD PTR _XMSControl
|
|
;|*** clc
|
|
; Line 161
|
|
*** 000080 f8 clc
|
|
;|*** rcr al, 1
|
|
; Line 162
|
|
*** 000081 d0 d8 rcr al,1
|
|
;|*** jc done
|
|
; Line 163
|
|
*** 000083 72 05 jb $done252
|
|
;|***
|
|
;|*** xor bh, bh
|
|
; Line 165
|
|
*** 000085 32 ff xor bh,bh
|
|
;|*** mov xmsError, bx
|
|
; Line 166
|
|
*** 000087 89 5e fe mov WORD PTR [bp-2],bx ;xmsError
|
|
;|*** }
|
|
; Line 167
|
|
;|***
|
|
;|*** done:
|
|
; Line 169
|
|
$done252:
|
|
;|*** return xmsError;
|
|
; Line 170
|
|
*** 00008a 8b 46 fe mov ax,WORD PTR [bp-2] ;xmsError
|
|
;|*** }
|
|
; Line 171
|
|
*** 00008d c9 leave
|
|
*** 00008e c3 ret
|
|
*** 00008f 90 nop
|
|
|
|
_XmsLocalDisableA20 ENDP
|
|
PUBLIC _XmsQueryA20
|
|
_XmsQueryA20 PROC NEAR
|
|
;|***
|
|
;|*** int
|
|
;|*** XmsQueryA20(
|
|
;|*** int *pbEnabled)
|
|
;|*** {
|
|
; Line 176
|
|
*** 000090 c8 02 00 00 enter 2,0
|
|
*** 000094 56 push si
|
|
; xmsError = -2
|
|
; pbEnabled = 4
|
|
;|*** int xmsError = XMS_SUCCESS;
|
|
; Line 177
|
|
*** 000095 c7 46 fe 00 00 mov WORD PTR [bp-2],0 ;xmsError
|
|
;|***
|
|
;|*** if (!XmsIsInstalled())
|
|
; Line 179
|
|
*** 00009a e8 63 ff call _XmsIsInstalled
|
|
*** 00009d 0b c0 or ax,ax
|
|
*** 00009f 75 07 jne $I257
|
|
;|*** {
|
|
;|*** return XMS_E_NOT_IMPLEMENTED;
|
|
; Line 181
|
|
*** 0000a1 b8 80 00 mov ax,128 ;0080H
|
|
*** 0000a4 5e pop si
|
|
*** 0000a5 c9 leave
|
|
*** 0000a6 c3 ret
|
|
*** 0000a7 90 nop
|
|
;|*** }
|
|
;|***
|
|
;|*** _asm
|
|
; Line 184
|
|
$I257:
|
|
;|*** {
|
|
;|*** mov ah, 07h
|
|
; Line 186
|
|
*** 0000a8 b4 07 mov ah,7
|
|
;|*** call [XMSControl]
|
|
; Line 187
|
|
*** 0000aa ff 1e 00 00 call DWORD PTR _XMSControl
|
|
;|***
|
|
;|*** push si
|
|
; Line 189
|
|
*** 0000ae 56 push si
|
|
;|*** mov si, pbEnabled
|
|
; Line 190
|
|
*** 0000af 8b 76 04 mov si,WORD PTR [bp+4] ;pbEnabled
|
|
;|*** mov WORD PTR [si], ax
|
|
; Line 191
|
|
*** 0000b2 89 04 mov WORD PTR [si],ax
|
|
;|*** pop si
|
|
; Line 192
|
|
*** 0000b4 5e pop si
|
|
;|***
|
|
;|*** xor bh, bh
|
|
; Line 194
|
|
*** 0000b5 32 ff xor bh,bh
|
|
;|*** mov xmsError, bx
|
|
; Line 195
|
|
*** 0000b7 89 5e fe mov WORD PTR [bp-2],bx ;xmsError
|
|
;|*** }
|
|
; Line 196
|
|
;|***
|
|
;|*** return xmsError;
|
|
; Line 198
|
|
*** 0000ba 8b 46 fe mov ax,WORD PTR [bp-2] ;xmsError
|
|
;|*** }
|
|
; Line 199
|
|
*** 0000bd 5e pop si
|
|
*** 0000be c9 leave
|
|
*** 0000bf c3 ret
|
|
|
|
_XmsQueryA20 ENDP
|
|
PUBLIC _XmsQueryFreeExtendedMemory
|
|
_XmsQueryFreeExtendedMemory PROC NEAR
|
|
;|***
|
|
;|*** int
|
|
;|*** XmsQueryFreeExtendedMemory(
|
|
;|*** unsigned int *puiLargestFreeBlock,
|
|
;|*** unsigned int *puiTotalFree)
|
|
;|*** {
|
|
; Line 205
|
|
*** 0000c0 c8 02 00 00 enter 2,0
|
|
*** 0000c4 56 push si
|
|
; xmsError = -2
|
|
; puiTotalFree = 6
|
|
; puiLargestFreeBlock = 4
|
|
;|*** int xmsError = XMS_SUCCESS;
|
|
; Line 206
|
|
*** 0000c5 c7 46 fe 00 00 mov WORD PTR [bp-2],0 ;xmsError
|
|
;|***
|
|
;|*** if (!XmsIsInstalled())
|
|
; Line 208
|
|
*** 0000ca e8 33 ff call _XmsIsInstalled
|
|
*** 0000cd 0b c0 or ax,ax
|
|
*** 0000cf 75 07 jne $I264
|
|
;|*** {
|
|
;|*** return XMS_E_NOT_IMPLEMENTED;
|
|
; Line 210
|
|
*** 0000d1 b8 80 00 mov ax,128 ;0080H
|
|
*** 0000d4 5e pop si
|
|
*** 0000d5 c9 leave
|
|
*** 0000d6 c3 ret
|
|
*** 0000d7 90 nop
|
|
;|*** }
|
|
;|***
|
|
;|*** _asm
|
|
; Line 213
|
|
$I264:
|
|
;|*** {
|
|
;|*** mov ah, 08h
|
|
; Line 215
|
|
*** 0000d8 b4 08 mov ah,8
|
|
;|*** call [XMSControl]
|
|
; Line 216
|
|
*** 0000da ff 1e 00 00 call DWORD PTR _XMSControl
|
|
;|***
|
|
;|*** push si
|
|
; Line 218
|
|
*** 0000de 56 push si
|
|
;|*** mov si, puiLargestFreeBlock
|
|
; Line 219
|
|
*** 0000df 8b 76 04 mov si,WORD PTR [bp+4] ;puiLargestFreeBlock
|
|
;|*** mov WORD PTR [si], ax
|
|
; Line 220
|
|
*** 0000e2 89 04 mov WORD PTR [si],ax
|
|
;|***
|
|
;|*** mov si, puiTotalFree
|
|
; Line 222
|
|
*** 0000e4 8b 76 06 mov si,WORD PTR [bp+6] ;puiTotalFree
|
|
;|*** mov WORD PTR [si], dx
|
|
; Line 223
|
|
*** 0000e7 89 14 mov WORD PTR [si],dx
|
|
;|*** pop si
|
|
; Line 224
|
|
*** 0000e9 5e pop si
|
|
;|***
|
|
;|*** xor bh, bh
|
|
; Line 226
|
|
*** 0000ea 32 ff xor bh,bh
|
|
;|*** mov xmsError, bx
|
|
; Line 227
|
|
*** 0000ec 89 5e fe mov WORD PTR [bp-2],bx ;xmsError
|
|
;|*** }
|
|
; Line 228
|
|
;|***
|
|
;|*** return xmsError;
|
|
; Line 230
|
|
*** 0000ef 8b 46 fe mov ax,WORD PTR [bp-2] ;xmsError
|
|
;|*** }
|
|
; Line 231
|
|
*** 0000f2 5e pop si
|
|
*** 0000f3 c9 leave
|
|
*** 0000f4 c3 ret
|
|
*** 0000f5 90 nop
|
|
|
|
_XmsQueryFreeExtendedMemory ENDP
|
|
PUBLIC _XmsAllocateExtendedMemory
|
|
_XmsAllocateExtendedMemory PROC NEAR
|
|
;|***
|
|
;|*** int
|
|
;|*** XmsAllocateExtendedMemory(
|
|
;|*** unsigned int uiBlockSizeK,
|
|
;|*** unsigned int * puiBlockHandle)
|
|
;|*** {
|
|
; Line 237
|
|
*** 0000f6 c8 02 00 00 enter 2,0
|
|
*** 0000fa 56 push si
|
|
; xmsError = -2
|
|
; puiBlockHandle = 6
|
|
; uiBlockSizeK = 4
|
|
;|*** int xmsError = XMS_SUCCESS;
|
|
; Line 238
|
|
*** 0000fb c7 46 fe 00 00 mov WORD PTR [bp-2],0 ;xmsError
|
|
;|***
|
|
;|*** if (!XmsIsInstalled())
|
|
; Line 240
|
|
*** 000100 e8 fd fe call _XmsIsInstalled
|
|
*** 000103 0b c0 or ax,ax
|
|
*** 000105 75 07 jne $I271
|
|
;|*** {
|
|
;|*** return XMS_E_NOT_IMPLEMENTED;
|
|
; Line 242
|
|
*** 000107 b8 80 00 mov ax,128 ;0080H
|
|
*** 00010a 5e pop si
|
|
*** 00010b c9 leave
|
|
*** 00010c c3 ret
|
|
*** 00010d 90 nop
|
|
;|*** }
|
|
;|***
|
|
;|*** _asm
|
|
; Line 245
|
|
$I271:
|
|
;|*** {
|
|
;|*** mov ah, 09h
|
|
; Line 247
|
|
*** 00010e b4 09 mov ah,9
|
|
;|*** mov dx, uiBlockSizeK
|
|
; Line 248
|
|
*** 000110 8b 56 04 mov dx,WORD PTR [bp+4] ;uiBlockSizeK
|
|
;|*** call [XMSControl]
|
|
; Line 249
|
|
*** 000113 ff 1e 00 00 call DWORD PTR _XMSControl
|
|
;|***
|
|
;|*** push si
|
|
; Line 251
|
|
*** 000117 56 push si
|
|
;|*** mov si, puiBlockHandle
|
|
; Line 252
|
|
*** 000118 8b 76 06 mov si,WORD PTR [bp+6] ;puiBlockHandle
|
|
;|*** mov WORD PTR [si], dx
|
|
; Line 253
|
|
*** 00011b 89 14 mov WORD PTR [si],dx
|
|
;|*** pop si
|
|
; Line 254
|
|
*** 00011d 5e pop si
|
|
;|***
|
|
;|*** clc
|
|
; Line 256
|
|
*** 00011e f8 clc
|
|
;|*** rcr al, 1
|
|
; Line 257
|
|
*** 00011f d0 d8 rcr al,1
|
|
;|*** jc done
|
|
; Line 258
|
|
*** 000121 72 05 jb $done272
|
|
;|***
|
|
;|*** xor bh, bh
|
|
; Line 260
|
|
*** 000123 32 ff xor bh,bh
|
|
;|*** mov xmsError, bx
|
|
; Line 261
|
|
*** 000125 89 5e fe mov WORD PTR [bp-2],bx ;xmsError
|
|
;|*** }
|
|
; Line 262
|
|
;|***
|
|
;|*** done:
|
|
; Line 264
|
|
$done272:
|
|
;|*** return xmsError;
|
|
; Line 265
|
|
*** 000128 8b 46 fe mov ax,WORD PTR [bp-2] ;xmsError
|
|
;|*** }
|
|
; Line 266
|
|
*** 00012b 5e pop si
|
|
*** 00012c c9 leave
|
|
*** 00012d c3 ret
|
|
|
|
_XmsAllocateExtendedMemory ENDP
|
|
PUBLIC _XmsFreeExtendedMemory
|
|
_XmsFreeExtendedMemory PROC NEAR
|
|
;|***
|
|
;|*** int
|
|
;|*** XmsFreeExtendedMemory(
|
|
;|*** unsigned int uiBlockHandle)
|
|
;|*** {
|
|
; Line 271
|
|
*** 00012e c8 02 00 00 enter 2,0
|
|
; xmsError = -2
|
|
; uiBlockHandle = 4
|
|
;|*** int xmsError = XMS_SUCCESS;
|
|
; Line 272
|
|
*** 000132 c7 46 fe 00 00 mov WORD PTR [bp-2],0 ;xmsError
|
|
;|***
|
|
;|*** if (!XmsIsInstalled())
|
|
; Line 274
|
|
*** 000137 e8 c6 fe call _XmsIsInstalled
|
|
*** 00013a 0b c0 or ax,ax
|
|
*** 00013c 75 06 jne $I277
|
|
;|*** {
|
|
;|*** return XMS_E_NOT_IMPLEMENTED;
|
|
; Line 276
|
|
*** 00013e b8 80 00 mov ax,128 ;0080H
|
|
*** 000141 c9 leave
|
|
*** 000142 c3 ret
|
|
*** 000143 90 nop
|
|
;|*** }
|
|
;|***
|
|
;|*** _asm
|
|
; Line 279
|
|
$I277:
|
|
;|*** {
|
|
;|*** mov ah, 0Ah
|
|
; Line 281
|
|
*** 000144 b4 0a mov ah,10 ;000aH
|
|
;|*** mov dx, uiBlockHandle
|
|
; Line 282
|
|
*** 000146 8b 56 04 mov dx,WORD PTR [bp+4] ;uiBlockHandle
|
|
;|*** call [XMSControl]
|
|
; Line 283
|
|
*** 000149 ff 1e 00 00 call DWORD PTR _XMSControl
|
|
;|***
|
|
;|*** clc
|
|
; Line 285
|
|
*** 00014d f8 clc
|
|
;|*** rcr al, 1
|
|
; Line 286
|
|
*** 00014e d0 d8 rcr al,1
|
|
;|*** jc done
|
|
; Line 287
|
|
*** 000150 72 05 jb $done278
|
|
;|***
|
|
;|*** xor bh, bh
|
|
; Line 289
|
|
*** 000152 32 ff xor bh,bh
|
|
;|*** mov xmsError, bx
|
|
; Line 290
|
|
*** 000154 89 5e fe mov WORD PTR [bp-2],bx ;xmsError
|
|
;|*** }
|
|
; Line 291
|
|
;|***
|
|
;|*** done:
|
|
; Line 293
|
|
$done278:
|
|
;|*** return xmsError;
|
|
; Line 294
|
|
*** 000157 8b 46 fe mov ax,WORD PTR [bp-2] ;xmsError
|
|
;|*** }
|
|
; Line 295
|
|
*** 00015a c9 leave
|
|
*** 00015b c3 ret
|
|
|
|
_XmsFreeExtendedMemory ENDP
|
|
PUBLIC _XmsMoveExtendedMemory
|
|
_XmsMoveExtendedMemory PROC NEAR
|
|
;|***
|
|
;|*** int
|
|
;|*** XmsMoveExtendedMemory(
|
|
;|*** unsigned int uiSourceHandle,
|
|
;|*** unsigned long ulSourceOffset,
|
|
;|*** unsigned int uiDestinationHandle,
|
|
;|*** unsigned long ulDestinationOffset,
|
|
;|*** unsigned long ulLength)
|
|
;|*** {
|
|
; Line 304
|
|
*** 00015c c8 12 00 00 enter 18,0
|
|
*** 000160 56 push si
|
|
; moveInfo = -16
|
|
; xmsError = -18
|
|
; ulLength = 16
|
|
; ulDestinationOffset = 12
|
|
; uiDestinationHandle = 10
|
|
; ulSourceOffset = 6
|
|
; uiSourceHandle = 4
|
|
;|*** EXTENDED_MEMORY_MOVE moveInfo;
|
|
;|***
|
|
;|*** int xmsError = XMS_SUCCESS;
|
|
; Line 307
|
|
*** 000161 c7 46 ee 00 00 mov WORD PTR [bp-18],0 ;xmsError
|
|
;|***
|
|
;|*** if (!XmsIsInstalled())
|
|
; Line 309
|
|
*** 000166 e8 97 fe call _XmsIsInstalled
|
|
*** 000169 0b c0 or ax,ax
|
|
*** 00016b 75 07 jne $I292
|
|
;|*** {
|
|
;|*** return XMS_E_NOT_IMPLEMENTED;
|
|
; Line 311
|
|
*** 00016d b8 80 00 mov ax,128 ;0080H
|
|
*** 000170 5e pop si
|
|
*** 000171 c9 leave
|
|
*** 000172 c3 ret
|
|
*** 000173 90 nop
|
|
;|*** }
|
|
;|***
|
|
;|*** moveInfo.uiSourceHandle = uiSourceHandle;
|
|
; Line 314
|
|
$I292:
|
|
*** 000174 8b 46 04 mov ax,WORD PTR [bp+4] ;uiSourceHandle
|
|
*** 000177 89 46 f4 mov WORD PTR [bp-12],ax
|
|
;|*** moveInfo.ulSourceOffset = ulSourceOffset;
|
|
; Line 315
|
|
*** 00017a 8b 46 06 mov ax,WORD PTR [bp+6] ;ulSourceOffset
|
|
*** 00017d 8b 56 08 mov dx,WORD PTR [bp+8]
|
|
*** 000180 89 46 f6 mov WORD PTR [bp-10],ax
|
|
*** 000183 89 56 f8 mov WORD PTR [bp-8],dx
|
|
;|*** moveInfo.uiDestinationHandle = uiDestinationHandle;
|
|
; Line 316
|
|
*** 000186 8b 46 0a mov ax,WORD PTR [bp+10] ;uiDestinationHandle
|
|
*** 000189 89 46 fa mov WORD PTR [bp-6],ax
|
|
;|*** moveInfo.ulDestinationOffset = ulDestinationOffset;
|
|
; Line 317
|
|
*** 00018c 8b 46 0c mov ax,WORD PTR [bp+12] ;ulDestinationOffset
|
|
*** 00018f 8b 56 0e mov dx,WORD PTR [bp+14]
|
|
*** 000192 89 46 fc mov WORD PTR [bp-4],ax
|
|
*** 000195 89 56 fe mov WORD PTR [bp-2],dx
|
|
;|*** moveInfo.ulLength = ulLength;
|
|
; Line 318
|
|
*** 000198 8b 46 10 mov ax,WORD PTR [bp+16] ;ulLength
|
|
*** 00019b 8b 56 12 mov dx,WORD PTR [bp+18]
|
|
*** 00019e 89 46 f0 mov WORD PTR [bp-16],ax ;moveInfo
|
|
*** 0001a1 89 56 f2 mov WORD PTR [bp-14],dx
|
|
;|***
|
|
;|*** _asm
|
|
;|*** {
|
|
;|*** mov ah, 0Bh
|
|
; Line 322
|
|
*** 0001a4 b4 0b mov ah,11 ;000bH
|
|
;|***
|
|
;|*** push si
|
|
; Line 324
|
|
*** 0001a6 56 push si
|
|
;|*** lea si, moveInfo
|
|
; Line 325
|
|
*** 0001a7 8d 76 f0 lea si,WORD PTR [bp-16] ;moveInfo
|
|
;|*** call [XMSControl]
|
|
; Line 326
|
|
*** 0001aa ff 1e 00 00 call DWORD PTR _XMSControl
|
|
;|*** pop si
|
|
; Line 327
|
|
*** 0001ae 5e pop si
|
|
;|***
|
|
;|*** clc
|
|
; Line 329
|
|
*** 0001af f8 clc
|
|
;|*** rcr al, 1
|
|
; Line 330
|
|
*** 0001b0 d0 d8 rcr al,1
|
|
;|*** jc done
|
|
; Line 331
|
|
*** 0001b2 72 05 jb $done293
|
|
;|***
|
|
;|*** xor bh, bh
|
|
; Line 333
|
|
*** 0001b4 32 ff xor bh,bh
|
|
;|*** mov xmsError, bx
|
|
; Line 334
|
|
*** 0001b6 89 5e ee mov WORD PTR [bp-18],bx ;xmsError
|
|
;|*** }
|
|
; Line 335
|
|
;|***
|
|
;|*** done:
|
|
; Line 337
|
|
$done293:
|
|
;|*** return xmsError;
|
|
; Line 338
|
|
*** 0001b9 8b 46 ee mov ax,WORD PTR [bp-18] ;xmsError
|
|
;|*** }
|
|
; Line 339
|
|
*** 0001bc 5e pop si
|
|
*** 0001bd c9 leave
|
|
*** 0001be c3 ret
|
|
*** 0001bf 90 nop
|
|
|
|
_XmsMoveExtendedMemory ENDP
|
|
PUBLIC _XmsLockExtendedMemory
|
|
_XmsLockExtendedMemory PROC NEAR
|
|
;|***
|
|
;|*** int
|
|
;|*** XmsLockExtendedMemory(
|
|
;|*** unsigned int uiBlockHandle,
|
|
;|*** unsigned long * pulLinearAddress)
|
|
;|*** {
|
|
; Line 345
|
|
*** 0001c0 c8 02 00 00 enter 2,0
|
|
*** 0001c4 56 push si
|
|
; xmsError = -2
|
|
; pulLinearAddress = 6
|
|
; uiBlockHandle = 4
|
|
;|*** int xmsError = XMS_SUCCESS;
|
|
; Line 346
|
|
*** 0001c5 c7 46 fe 00 00 mov WORD PTR [bp-2],0 ;xmsError
|
|
;|***
|
|
;|*** if (!XmsIsInstalled())
|
|
; Line 348
|
|
*** 0001ca e8 33 fe call _XmsIsInstalled
|
|
*** 0001cd 0b c0 or ax,ax
|
|
*** 0001cf 75 07 jne $I300
|
|
;|*** {
|
|
;|*** return XMS_E_NOT_IMPLEMENTED;
|
|
; Line 350
|
|
*** 0001d1 b8 80 00 mov ax,128 ;0080H
|
|
*** 0001d4 5e pop si
|
|
*** 0001d5 c9 leave
|
|
*** 0001d6 c3 ret
|
|
*** 0001d7 90 nop
|
|
;|*** }
|
|
;|***
|
|
;|*** _asm
|
|
; Line 353
|
|
$I300:
|
|
;|*** {
|
|
;|*** mov ah, 0Ch
|
|
; Line 355
|
|
*** 0001d8 b4 0c mov ah,12 ;000cH
|
|
;|*** mov dx, uiBlockHandle
|
|
; Line 356
|
|
*** 0001da 8b 56 04 mov dx,WORD PTR [bp+4] ;uiBlockHandle
|
|
;|*** call [XMSControl]
|
|
; Line 357
|
|
*** 0001dd ff 1e 00 00 call DWORD PTR _XMSControl
|
|
;|***
|
|
;|*** push si
|
|
; Line 359
|
|
*** 0001e1 56 push si
|
|
;|*** mov si, pulLinearAddress
|
|
; Line 360
|
|
*** 0001e2 8b 76 06 mov si,WORD PTR [bp+6] ;pulLinearAddress
|
|
;|*** mov WORD PTR [si], bx
|
|
; Line 361
|
|
*** 0001e5 89 1c mov WORD PTR [si],bx
|
|
;|*** mov WORD PTR [si + 2], dx
|
|
; Line 362
|
|
*** 0001e7 89 54 02 mov WORD PTR [si+2],dx
|
|
;|*** pop si
|
|
; Line 363
|
|
*** 0001ea 5e pop si
|
|
;|***
|
|
;|*** clc
|
|
; Line 365
|
|
*** 0001eb f8 clc
|
|
;|*** rcr al, 1
|
|
; Line 366
|
|
*** 0001ec d0 d8 rcr al,1
|
|
;|*** jc done
|
|
; Line 367
|
|
*** 0001ee 72 05 jb $done301
|
|
;|***
|
|
;|*** xor bh, bh
|
|
; Line 369
|
|
*** 0001f0 32 ff xor bh,bh
|
|
;|*** mov xmsError, bx
|
|
; Line 370
|
|
*** 0001f2 89 5e fe mov WORD PTR [bp-2],bx ;xmsError
|
|
;|*** }
|
|
; Line 371
|
|
;|***
|
|
;|*** done:
|
|
; Line 373
|
|
$done301:
|
|
;|*** return xmsError;
|
|
; Line 374
|
|
*** 0001f5 8b 46 fe mov ax,WORD PTR [bp-2] ;xmsError
|
|
;|*** }
|
|
; Line 375
|
|
*** 0001f8 5e pop si
|
|
*** 0001f9 c9 leave
|
|
*** 0001fa c3 ret
|
|
*** 0001fb 90 nop
|
|
|
|
_XmsLockExtendedMemory ENDP
|
|
PUBLIC _XmsUnlockExtendedMemory
|
|
_XmsUnlockExtendedMemory PROC NEAR
|
|
;|***
|
|
;|*** int
|
|
;|*** XmsUnlockExtendedMemory(
|
|
;|*** unsigned int uiBlockHandle)
|
|
;|*** {
|
|
; Line 380
|
|
*** 0001fc c8 02 00 00 enter 2,0
|
|
; xmsError = -2
|
|
; uiBlockHandle = 4
|
|
;|*** int xmsError = XMS_SUCCESS;
|
|
; Line 381
|
|
*** 000200 c7 46 fe 00 00 mov WORD PTR [bp-2],0 ;xmsError
|
|
;|***
|
|
;|*** if (!XmsIsInstalled())
|
|
; Line 383
|
|
*** 000205 e8 f8 fd call _XmsIsInstalled
|
|
*** 000208 0b c0 or ax,ax
|
|
*** 00020a 75 06 jne $I306
|
|
;|*** {
|
|
;|*** return XMS_E_NOT_IMPLEMENTED;
|
|
; Line 385
|
|
*** 00020c b8 80 00 mov ax,128 ;0080H
|
|
*** 00020f c9 leave
|
|
*** 000210 c3 ret
|
|
*** 000211 90 nop
|
|
;|*** }
|
|
;|***
|
|
;|*** _asm
|
|
; Line 388
|
|
$I306:
|
|
;|*** {
|
|
;|*** mov ah, 0Dh
|
|
; Line 390
|
|
*** 000212 b4 0d mov ah,13 ;000dH
|
|
;|*** mov dx, uiBlockHandle
|
|
; Line 391
|
|
*** 000214 8b 56 04 mov dx,WORD PTR [bp+4] ;uiBlockHandle
|
|
;|*** call [XMSControl]
|
|
; Line 392
|
|
*** 000217 ff 1e 00 00 call DWORD PTR _XMSControl
|
|
;|***
|
|
;|*** clc
|
|
; Line 394
|
|
*** 00021b f8 clc
|
|
;|*** rcr al, 1
|
|
; Line 395
|
|
*** 00021c d0 d8 rcr al,1
|
|
;|*** jc done
|
|
; Line 396
|
|
*** 00021e 72 05 jb $done307
|
|
;|***
|
|
;|*** xor bh, bh
|
|
; Line 398
|
|
*** 000220 32 ff xor bh,bh
|
|
;|*** mov xmsError, bx
|
|
; Line 399
|
|
*** 000222 89 5e fe mov WORD PTR [bp-2],bx ;xmsError
|
|
;|*** }
|
|
; Line 400
|
|
;|***
|
|
;|*** done:
|
|
; Line 402
|
|
$done307:
|
|
;|*** return xmsError;
|
|
; Line 403
|
|
*** 000225 8b 46 fe mov ax,WORD PTR [bp-2] ;xmsError
|
|
;|*** }
|
|
; Line 404
|
|
*** 000228 c9 leave
|
|
*** 000229 c3 ret
|
|
|
|
_XmsUnlockExtendedMemory ENDP
|
|
PUBLIC _XmsErrorString
|
|
_XmsErrorString PROC NEAR
|
|
;|***
|
|
;|*** char *XmsErrorString(int xmsError)
|
|
;|*** {
|
|
; Line 407
|
|
*** 00022a 55 push bp
|
|
*** 00022b 8b ec mov bp,sp
|
|
*** 00022d 57 push di
|
|
; xmsError = 4
|
|
; register di = i
|
|
;|*** int i;
|
|
;|***
|
|
;|*** for (i = 0; i < N_XMS_ERROR_MESSAGES; i++)
|
|
; Line 410
|
|
*** 00022e 33 ff xor di,di
|
|
*** 000230 bb 00 00 mov bx,OFFSET DGROUP:_XmsErrorMessages
|
|
*** 000233 8b 56 04 mov dx,WORD PTR [bp+4] ;xmsError
|
|
$F312:
|
|
;|*** {
|
|
;|*** if (XmsErrorMessages[i].iErrorCode == xmsError)
|
|
; Line 412
|
|
*** 000236 39 17 cmp WORD PTR [bx],dx
|
|
*** 000238 74 0c je $L318
|
|
*** 00023a 47 inc di
|
|
*** 00023b 83 c3 04 add bx,4
|
|
*** 00023e 81 fb 68 00 cmp bx,OFFSET DGROUP:_XmsErrorMessages+104
|
|
*** 000242 72 f2 jb $F312
|
|
*** 000244 eb 0a jmp SHORT $FB314
|
|
$L318:
|
|
;|*** {
|
|
;|*** return XmsErrorMessages[i].pszErrorString;
|
|
; Line 414
|
|
*** 000246 c1 e7 02 shl di,2
|
|
*** 000249 8b 85 02 00 mov ax,WORD PTR _XmsErrorMessages[di+2]
|
|
*** 00024d 5f pop di
|
|
*** 00024e c9 leave
|
|
*** 00024f c3 ret
|
|
;|*** }
|
|
;|*** }
|
|
; Line 416
|
|
$FB314:
|
|
;|***
|
|
;|*** return "Unknown error";
|
|
; Line 418
|
|
*** 000250 b8 00 00 mov ax,OFFSET DGROUP:$SG316
|
|
;|*** }
|
|
; Line 419
|
|
*** 000253 5f pop di
|
|
*** 000254 c9 leave
|
|
*** 000255 c3 ret
|
|
|
|
_XmsErrorString ENDP
|
|
_TEXT ENDS
|
|
END
|