home *** CD-ROM | disk | FTP | other *** search
- ;UPLOAD DS:SI - ECX GIVES HANDLE IN AX
- ;DOWNLOAD ES:DI - ECX HANDLE IN AX
- ;RELEASE HANDLE IN AX
-
- ;========================================[GETFREE]===========================>
- GETFREE:CMP CS:[EMS_],1
- JNE GF1
- CALL GET_EMS
- RET
- GF1: CMP CS:[XMS_],1
- JNE GF2
- CALL GET_XMS
- GF2: RET
-
- GET_XMS:PUSHA
- PUSH ES DS CS
- POP DS
- MOV AX,4310H
- INT 2FH
- MOV WORD PTR [XMSPTR+2],ES
- MOV WORD PTR [XMSPTR],BX
- MOV AH,8
- CALL DWORD PTR XMSPTR ; AX - FREE XMS IN KILOBYTES
- MOV BP,0
- MOV DX,0
- LEA DI,IDEWR+4
- CALL ASCII
- POP DS ES
- POPA
- RET
-
- GET_EMS:PUSH DS CS
- POP DS
- MOV AH,42H
- INT 67H
- MOV AX,BX
- SHL AX,4
- MOV BP,0
- MOV DX,0
- LEA DI,IDEWR+4
- CALL ASCII
- POP DS
- RET
- ;========================================[UPLOAD]============================>
-
- ;DS:SI - BOL ECX-NYIT
-
- UPLOAD: CMP CS:[EMS_],1
- JNE ULP1
- CALL EMS_UP
- RET
- ULP1: CMP [XMS_],1
- JNE ULP2
- CALL XMS_UP
- ULP2: RET
-
- XMS_UP: PUSH DS ES SI DS SI ECX
- MOV AX,CS
- MOV DS,AX
- MOV EDX,ECX
- SHR EDX,10
- INC EDX
- MOV AH,9
- CALL DWORD PTR XMSPTR
- POP ECX SI ES
- CMP AX,1
- JE XMSNE1
- JMP FATAL
- XMSNE1: MOV WORD PTR [XMSTRUC],CX
- SHR ECX,16
- MOV WORD PTR [XMSTRUC+02],CX
- MOV WORD PTR [XMSTRUC+04],0
- MOV WORD PTR [XMSTRUC+06],SI
- MOV WORD PTR [XMSTRUC+08],ES
- MOV WORD PTR [XMSTRUC+10],DX
- MOV WORD PTR [XMSTRUC+12],0
- MOV WORD PTR [XMSTRUC+14],0
- LEA SI,XMSTRUC
- MOV AH,0BH
- CALL DWORD PTR XMSPTR
- CMP AX,1
- JE XMSNE2
- JMP FATAL
- XMSNE2: POP SI ES DS
- XCHG DX,AX
- RET
-
- EMS_UP: PUSH DS CS
- POP DS ES
- PUSH DX
- MOV EBX,ECX
- SHR EBX,10
- INC EBX
- MOV AX,4300H
- INT 67H
- MOV AX,DX
- POP DX
- MOV DWORD PTR [EMSTRUC],ECX
- MOV BYTE PTR [EMSTRUC+4],0
- MOV WORD PTR [EMSTRUC+5],0
- MOV WORD PTR [EMSTRUC+7],SI
- MOV WORD PTR [EMSTRUC+9],ES
- MOV BYTE PTR [EMSTRUC+11],1
- MOV WORD PTR [EMSTRUC+12],AX
- MOV WORD PTR [EMSTRUC+14],0
- MOV WORD PTR [EMSTRUC+16],0
- PUSH AX
- LEA SI,EMSTRUC
- MOV AX,5700H
- INT 67H
- OR AX,AX
- JNZ FATAL
- POP AX
- PUSH ES
- POP DS
- RET
-
- FATAL: PUSH AX CS
- POP DS
- MOV AX,3
- INT 10H
- POP AX
- MOV BP,0
- MOV DX,0
- CMP EMS_,1
- JNE NOSHR1
- SHR AX,8
- NOSHR1: LEA DI,IDEFCK+4
- CALL ASCII
- LEA DX,FUCKOFF
- MOV AH,9
- INT 21H
- MOV AX,4C00H
- INT 21H
- ;========================================[DOWNLOAD]==========================>
-
- DOWNLOAD:
- CMP CS:[EMS_],1
- JNE DL1
- CALL EMS_DL
- RET
- DL1: CMP CS:[XMS_],1
- JNE DL2
- CALL XMS_DL
- DL2: RET
-
- XMS_DL: PUSH DS ES DI
- MOV DX,CS
- MOV DS,DX
- MOV WORD PTR [XMSTRUC],CX
- SHR ECX,16
- MOV WORD PTR [XMSTRUC+02],CX
- MOV WORD PTR [XMSTRUC+04],AX
- MOV WORD PTR [XMSTRUC+06],0
- MOV WORD PTR [XMSTRUC+08],0
- MOV WORD PTR [XMSTRUC+10],0
- MOV WORD PTR [XMSTRUC+12],DI
- MOV WORD PTR [XMSTRUC+14],ES
- LEA SI,XMSTRUC
- MOV AH,0BH
- CALL DWORD PTR XMSPTR
- CMP AX,1
- JE XMSNE4
- JMP FATAL
- XMSNE4: POP DI ES DS
- RET
-
- EMS_DL: PUSH DS CS
- POP DS
- MOV DWORD PTR [EMSTRUC],ECX
- MOV BYTE PTR [EMSTRUC+4],1
- MOV WORD PTR [EMSTRUC+5],AX
- MOV WORD PTR [EMSTRUC+7],0
- MOV WORD PTR [EMSTRUC+9],0
- MOV BYTE PTR [EMSTRUC+11],0
- MOV WORD PTR [EMSTRUC+12],0
- MOV WORD PTR [EMSTRUC+14],DI
- MOV WORD PTR [EMSTRUC+16],ES
- LEA SI,EMSTRUC
- MOV AX,5700H
- INT 67H
- OR AX,AX
- JZ NOFAT1
- JMP FATAL
- NOFAT1: POP DS
- RET
-
- ;========================================[RELEASE]===========================>
-
- RELEASE:CMP CS:[EMS_],1
- JNE NOR1
- CALL REL_EMS
- RET
- NOR1: CMP CS:[XMS_],1
- JNE NOR2
- CALL REL_XMS
- NOR2: RET
-
- REL_XMS:MOV DX,AX
- MOV AH,0AH
- CALL DWORD PTR XMSPTR
- RET
-
- REL_EMS:MOV DX,AX
- MOV AX,4500H
- INT 67H
- RET
- ;========================================[DETECTIONS]========================>
-
- DETECT: PUSH DS CS
- POP DS
- CALL EMSDET
- CALL XMSDET
- CMP CS:[EMS_],1
- JNE NINCSEM
- MOV AX,3
- INT 10H
- LEA DX,ERRORKA
- MOV AH,9
- INT 21H
- MOV AX,4C00H
- INT 21H
- NINCSEM:CMP CS:[XMS_],1
- JE OK_ALL
- MOV AX,3
- INT 10H
- LEA DX,ERRORKB
- MOV AH,9
- INT 21H
- MOV AX,4C00H
- INT 21H
- OK_ALL: POP DS
- RET
-
- EMSDET: LEA DX,EMMNAME
- MOV AX,3D00H
- INT 21H
- CMP AL,2
- JE NOT_OK1
- MOV AH,40H
- INT 67H
- CMP AH,0
- JNE NOT_OK1
- MOV EMS_,1
- NOT_OK1:RET
-
- XMSDET: MOV AX,4300H
- INT 2FH
- CMP AL,80H
- JNE NOT_OK2
- MOV XMS_,1
- NOT_OK2:RET
-
- ;============================================================================>
-
- INITMSG:LEA DX,MSG1
- MOV AH,9
- INT 21H
- CMP EMS_,1
- JE EMSMODE
- CMP XMS_,1
- JE XMSMODE
- LEA DX,MNON
- JMP WRMSG1
- EMSMODE:LEA DX,MEMS
- JMP WRMSG1
- XMSMODE:LEA DX,MXMS
- WRMSG1: MOV AH,9
- INT 21H
- RET
- ;=============================[HEX->ASCII CONVERTER===========================>
-
- ASCii: PUSH BX
- XCHG BP,DX ;SAVE HiGH WORD
- MOV BX,0AH ;DiViSOR
- MOV CL,30H ;CONVERSiON FOR ASCii
- RPT1: CMP BP,0 ;ARE WE DONE WiTH HiGH WORDS
- JZ RPT2 ;YES
- XCHG AX,BP ;NO-GET HiGH WORD
- XOR DX,DX ;CLEAR DX
- DiV BX
- XCHG BP,AX ;THiS WiLL BE THE NEW HiGH WORD
- DiV BX ;DiViDE LOW WORD + REMAiNDER
- OR DL,CL ;CONVERT HEX VALUE TO ASCii
- MOV [Di],DL ;QUOTiENT iNTO STORAGE
- DEC Di ;STEP BACK ONE BYTE
- JMP RPT1 ;GO AGAiN
- RPT2: XOR DX,DX ;CLEAR DX
- DiV BX
- OR DL,CL ;CONVERT HEX VALUE TO ASCii
- MOV [Di],DL ;QUOTiENT iNTO STORAGE
- DEC Di ;STEP BACK ONE BYTE
- CMP AX,0 ;ARE WE DONE?
- JNZ RPT2 ;NO
- POP BX
- RET ;YES
-
- ;=============================[DATAS]=========================================>
-
- MSG1 DB 10,13,'XMS DRiVER o.12b BY CYBERDANCER/SHOCK',10,13
- DB 'FREE MEMORY:'
- IDEWR: DB ' 0000 KiLOBYTES',10,13
- DB 'MODE: $'
- MEMS DB 'EMS',10,13,'$'
- MXMS DB 'XMS',10,13,'$'
- MNON DB 'NO MODE AVAILABLE',10,13,'$'
- EMMNAME DB 'EMMXXXX0',0
- FUCKOFF DB 'XMS OR EMS ERROR...CODE:'
- IDEFCK DB ' 0000$'
- ERRORKA DB 'PLEASE USE _ONLY_ HIMEM.SYS TO RUN THIS DENTRO!$'
- ERRORKB DB 'NO XMS DRIVER DETECTED! (PLEASE USE HIMEM.SYS)$'
- EMS_ DB 0
- XMS_ DB 0
- HANDLE DW ?
- XMSPTR DD ?
- EMSPTR DD ?
- XMSTRUC DB 16 DUP (?)
- EMSTRUC DB 18 DUP (?)
- HNDLTBL DB 200 DUP (?)
-