📄 gripfnc.asm
字号:
[GLOBAL _GrInitialize]
[GLOBAL _GrShutdown]
[GLOBAL _GrRefresh]
[GLOBAL _GrGetSlotMap]
[GLOBAL _GrGetClassMap]
[GLOBAL _GrGetOEMClassMap]
[GLOBAL _GrGetMaxIndex]
[GLOBAL _GrGetMaxValue]
[GLOBAL _GrGetValue]
[GLOBAL _GrGetPackedValues]
[GLOBAL _GrSetValue]
[GLOBAL _GrGetVendorName]
[GLOBAL _GrGetProductName]
[GLOBAL _GrGetControlName]
[GLOBAL _GrGetCaps]
[GLOBAL _Gr__Link]
[GLOBAL _Gr__Unlink]
[GLOBAL _GrGetSWVer]
[GLOBAL _GrGetHWVer]
[GLOBAL _GrGetDiagCnt]
[GLOBAL _GrGetDiagReg]
[GLOBAL _DPMI_SetCodeAR]
[GLOBAL _DPMI_SetDataAR]
[EXTERN _GRIP_Thunk]
[SEGMENT .text]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Since I don't know which registers DJGPP wants preserved, I've decided to ;;
;; save all registers that get modified, except for EAX when the function ;;
;; returns a value. Better safe than sorry, says me. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_GrInitialize:
mov ax, 84A1h
call far [_GRIP_Thunk+8]
RET
_GrShutdown:
push eax
mov ax, 84A2h
call far [_GRIP_Thunk+8]
pop eax
RET
_GrRefresh:
push ebp
mov ebp, esp
push edx
mov edx, dword [ebp+8]
mov ax, 84A0h
call far [_GRIP_Thunk+8]
pop edx
pop ebp
RET
_GrGetSlotMap:
mov ax, 84B0h
call far [_GRIP_Thunk+8]
RET
_GrGetClassMap:
push ebp
mov ebp, esp
push ebx
mov bh, byte [ebp+8]
mov ax, 84B1h
call far [_GRIP_Thunk+8]
pop ebx
pop ebp
RET
_GrGetOEMClassMap:
push ebp
mov ebp, esp
push ebx
mov bh, byte [ebp+8]
mov ax, 84B2h
call far [_GRIP_Thunk+8]
pop ebx
pop ebp
RET
_GrGetMaxIndex:
push ebp
mov ebp, esp
push ebx
mov bh, byte [ebp+8]
mov bl, byte [ebp+12]
mov ax, 84B3h
call far [_GRIP_Thunk+8]
pop ebx
pop ebp
RET
_GrGetMaxValue
push ebp
mov ebp, esp
mov bh, byte [ebp+8]
mov bl, byte [ebp+12]
mov ax, 84B4h
call far [_GRIP_Thunk+8]
pop ebp
RET
_GrGetValue
push ebp
mov ebp, esp
push ebx
push ecx
mov bh, byte [ebp+8]
mov bl, byte [ebp+12]
mov ch, byte [ebp+16]
mov ax, 84C0h
call far [_GRIP_Thunk+8]
pop ecx
pop ebx
pop ebp
RET
_GrGetPackedValues
push ebp
mov ebp, esp
push ebx
push ecx
mov bh, byte [ebp+8]
mov bl, byte [ebp+12]
mov ch, byte [ebp+16]
mov cl, byte [ebp+20]
mov ax, 84C1h
call far [_GRIP_Thunk+8]
pop ecx
pop ebx
pop ebp
RET
_GrSetValue
push ebp
mov ebp, esp
push eax
push ebx
push ecx
push edx
mov bh, byte [ebp+8]
mov bl, byte [ebp+12]
mov ch, byte [ebp+16]
mov dx, word [ebp+20]
mov ax, 84C2h
call far [_GRIP_Thunk+8]
pop edx
pop ecx
pop ebx
pop eax
pop ebp
RET
_GrGetVendorName
push ebp
mov ebp, esp
push esi
push edi
push eax
push ebx
push ecx
push edx
mov bh, byte [ebp+8]
mov edi, dword [ebp+12]
mov ax, 84D0h
call dword far [_GRIP_Thunk+8]
mov dword [edi+00h], ebx
mov dword [edi+04h], ecx
mov dword [edi+08h], edx
mov dword [edi+0Ch], esi
pop edx
pop ecx
pop ebx
pop eax
pop edi
pop esi
pop ebp
RET
_GrGetProductName
push ebp
mov ebp, esp
push esi
push edi
push ebx
push ecx
push edx
mov bh, byte [ebp+8]
mov edi, dword [ebp+12]
mov ax, 84D1h
call far [_GRIP_Thunk+8]
mov dword [edi+00h], ebx
mov dword [edi+04h], ecx
mov dword [edi+08h], edx
mov dword [edi+0Ch], esi
pop edx
pop ecx
pop ebx
pop edi
pop esi
pop ebp
RET
_GrGetControlName
push ebp
mov ebp, esp
push esi
push edi
push eax
push ebx
push ecx
push edx
mov bh, byte [ebp+8]
mov bl, byte [ebp+12]
mov ch, byte [ebp+16]
mov edi, dword [ebp+20]
mov ax, 84D2h
call far [_GRIP_Thunk+8]
mov dword [edi+00h], ebx
mov dword [edi+04h], ecx
mov dword [edi+08h], edx
mov dword [edi+0Ch], esi
pop edx
pop ecx
pop ebx
pop eax
pop edi
pop esi
pop ebp
RET
_GrGetCaps
xor eax, eax
RET
_Gr__Link
mov ax, 8490h
call far [_GRIP_Thunk+8]
RET
_Gr__Unlink
push eax
mov ax, 8491h
call far [_GRIP_Thunk+8]
pop eax
RET
_GrGetSWVer
mov ax, 84F0h
call far [_GRIP_Thunk+8]
RET
_GrGetHWVer
mov ax, 84F1h
call far [_GRIP_Thunk+8]
RET
_GrGetDiagCnt
mov ax, 84F2h
call far [_GRIP_Thunk+8]
RET
_GrGetDiagReg
push ebp
mov ebp, esp
push ebx
mov bh, byte [ebp+8]
mov ax, 84F3h
call far [_GRIP_Thunk+8]
pop ebx
pop ebp
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; These functions call the DPMI host to set access rights for the ;;
;; descriptor whose selector is sent as a parameter. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_DPMI_SetCodeAR:
push ebp
mov ebp, esp
push ebx
push ecx
pushf
mov bx, word [ebp + 8]
mov cx, cs
lar ecx, ecx
shr cx, 8
mov eax, 09h
int 31h
setc al
popf
pop ecx
pop ebx
pop ebp
RET
_DPMI_SetDataAR:
push ebp
mov ebp, esp
push ebx
push ecx
pushf
mov bx, word [ebp + 8]
mov cx, ds
lar ecx, ecx
shr cx, 8
mov eax, 09h
int 31h
setc al
popf
pop ecx
pop ebx
pop ebp
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -