home *** CD-ROM | disk | FTP | other *** search
/ CD-X 1 / cdx_01.iso / demodisc / cyberdan / intrance / inc / extender.asm < prev    next >
Encoding:
Assembly Source File  |  1995-03-10  |  8.7 KB  |  320 lines

  1. ;UPLOAD     DS:SI - ECX  GIVES HANDLE IN AX
  2. ;DOWNLOAD   ES:DI - ECX  HANDLE IN AX
  3. ;RELEASE    HANDLE IN AX
  4.  
  5. ;========================================[GETFREE]===========================>
  6. GETFREE:CMP     CS:[EMS_],1
  7.         JNE     GF1
  8.         CALL    GET_EMS
  9.         RET
  10. GF1:    CMP     CS:[XMS_],1
  11.         JNE     GF2
  12.         CALL    GET_XMS
  13. GF2:    RET
  14.  
  15. GET_XMS:PUSHA
  16.         PUSH    ES DS CS
  17.         POP     DS
  18.         MOV     AX,4310H
  19.         INT     2FH
  20.         MOV     WORD PTR [XMSPTR+2],ES
  21.         MOV     WORD PTR [XMSPTR],BX
  22.         MOV     AH,8
  23.         CALL    DWORD PTR XMSPTR         ; AX - FREE XMS IN KILOBYTES
  24.         MOV     BP,0
  25.         MOV     DX,0
  26.         LEA     DI,IDEWR+4
  27.         CALL    ASCII
  28.         POP     DS ES
  29.         POPA
  30.         RET
  31.  
  32. GET_EMS:PUSH    DS CS
  33.         POP     DS
  34.         MOV     AH,42H
  35.         INT     67H
  36.         MOV     AX,BX
  37.         SHL     AX,4
  38.         MOV     BP,0
  39.         MOV     DX,0
  40.         LEA     DI,IDEWR+4
  41.         CALL    ASCII
  42.         POP     DS
  43.         RET
  44. ;========================================[UPLOAD]============================>
  45.  
  46. ;DS:SI - BOL ECX-NYIT
  47.  
  48. UPLOAD: CMP     CS:[EMS_],1
  49.         JNE     ULP1
  50.         CALL    EMS_UP
  51.         RET
  52. ULP1:   CMP     [XMS_],1
  53.         JNE     ULP2
  54.         CALL    XMS_UP
  55. ULP2:   RET
  56.  
  57. XMS_UP: PUSH    DS ES SI DS SI ECX
  58.         MOV     AX,CS
  59.         MOV     DS,AX
  60.         MOV     EDX,ECX
  61.         SHR     EDX,10
  62.         INC     EDX
  63.         MOV     AH,9
  64.         CALL    DWORD PTR XMSPTR
  65.         POP     ECX SI ES
  66.         CMP     AX,1
  67.         JE      XMSNE1
  68.         JMP     FATAL
  69. XMSNE1: MOV     WORD PTR [XMSTRUC],CX
  70.         SHR     ECX,16
  71.         MOV     WORD PTR [XMSTRUC+02],CX
  72.         MOV     WORD PTR [XMSTRUC+04],0
  73.         MOV     WORD PTR [XMSTRUC+06],SI
  74.         MOV     WORD PTR [XMSTRUC+08],ES
  75.         MOV     WORD PTR [XMSTRUC+10],DX
  76.         MOV     WORD PTR [XMSTRUC+12],0
  77.         MOV     WORD PTR [XMSTRUC+14],0
  78.         LEA     SI,XMSTRUC
  79.         MOV     AH,0BH
  80.         CALL    DWORD PTR XMSPTR
  81.         CMP     AX,1
  82.         JE      XMSNE2
  83.         JMP     FATAL
  84. XMSNE2: POP     SI ES DS
  85.         XCHG    DX,AX
  86.         RET
  87.  
  88. EMS_UP: PUSH    DS CS
  89.         POP     DS ES
  90.         PUSH    DX
  91.         MOV     EBX,ECX
  92.         SHR     EBX,10
  93.         INC     EBX
  94.         MOV     AX,4300H
  95.         INT     67H
  96.         MOV     AX,DX
  97.         POP     DX
  98.         MOV     DWORD PTR [EMSTRUC],ECX
  99.         MOV     BYTE PTR  [EMSTRUC+4],0
  100.         MOV     WORD PTR  [EMSTRUC+5],0
  101.         MOV     WORD PTR  [EMSTRUC+7],SI
  102.         MOV     WORD PTR  [EMSTRUC+9],ES
  103.         MOV     BYTE PTR  [EMSTRUC+11],1
  104.         MOV     WORD PTR  [EMSTRUC+12],AX
  105.         MOV     WORD PTR  [EMSTRUC+14],0
  106.         MOV     WORD PTR  [EMSTRUC+16],0
  107.         PUSH    AX
  108.         LEA     SI,EMSTRUC
  109.         MOV     AX,5700H
  110.         INT     67H
  111.         OR      AX,AX
  112.         JNZ     FATAL
  113.         POP     AX
  114.         PUSH    ES
  115.         POP     DS
  116.         RET
  117.  
  118. FATAL:  PUSH    AX CS
  119.         POP     DS
  120.         MOV     AX,3
  121.         INT     10H
  122.         POP     AX
  123.         MOV     BP,0
  124.         MOV     DX,0
  125.         CMP     EMS_,1
  126.         JNE     NOSHR1
  127.         SHR     AX,8
  128. NOSHR1: LEA     DI,IDEFCK+4
  129.         CALL    ASCII
  130.         LEA     DX,FUCKOFF
  131.         MOV     AH,9
  132.         INT     21H
  133.         MOV     AX,4C00H
  134.         INT     21H
  135. ;========================================[DOWNLOAD]==========================>
  136.  
  137. DOWNLOAD:
  138.         CMP     CS:[EMS_],1
  139.         JNE     DL1
  140.         CALL    EMS_DL
  141.         RET
  142. DL1:    CMP     CS:[XMS_],1
  143.         JNE     DL2
  144.         CALL    XMS_DL
  145. DL2:    RET
  146.  
  147. XMS_DL: PUSH    DS ES DI
  148.         MOV     DX,CS
  149.         MOV     DS,DX
  150.         MOV     WORD PTR [XMSTRUC],CX
  151.         SHR     ECX,16
  152.         MOV     WORD PTR [XMSTRUC+02],CX
  153.         MOV     WORD PTR [XMSTRUC+04],AX
  154.         MOV     WORD PTR [XMSTRUC+06],0
  155.         MOV     WORD PTR [XMSTRUC+08],0
  156.         MOV     WORD PTR [XMSTRUC+10],0
  157.         MOV     WORD PTR [XMSTRUC+12],DI
  158.         MOV     WORD PTR [XMSTRUC+14],ES
  159.         LEA     SI,XMSTRUC
  160.         MOV     AH,0BH
  161.         CALL    DWORD PTR XMSPTR
  162.         CMP     AX,1
  163.         JE      XMSNE4
  164.         JMP     FATAL
  165. XMSNE4: POP     DI ES DS
  166.         RET
  167.  
  168. EMS_DL: PUSH    DS CS
  169.         POP     DS
  170.         MOV     DWORD PTR [EMSTRUC],ECX
  171.         MOV     BYTE PTR  [EMSTRUC+4],1
  172.         MOV     WORD PTR  [EMSTRUC+5],AX
  173.         MOV     WORD PTR  [EMSTRUC+7],0
  174.         MOV     WORD PTR  [EMSTRUC+9],0
  175.         MOV     BYTE PTR  [EMSTRUC+11],0
  176.         MOV     WORD PTR  [EMSTRUC+12],0
  177.         MOV     WORD PTR  [EMSTRUC+14],DI
  178.         MOV     WORD PTR  [EMSTRUC+16],ES
  179.         LEA     SI,EMSTRUC
  180.         MOV     AX,5700H
  181.         INT     67H
  182.         OR      AX,AX
  183.         JZ      NOFAT1
  184.         JMP     FATAL
  185. NOFAT1: POP     DS
  186.         RET
  187.  
  188. ;========================================[RELEASE]===========================>
  189.  
  190. RELEASE:CMP     CS:[EMS_],1
  191.         JNE     NOR1
  192.         CALL    REL_EMS
  193.         RET
  194. NOR1:   CMP     CS:[XMS_],1
  195.         JNE     NOR2
  196.         CALL    REL_XMS
  197. NOR2:   RET
  198.  
  199. REL_XMS:MOV     DX,AX
  200.         MOV     AH,0AH
  201.         CALL    DWORD PTR XMSPTR
  202.         RET
  203.  
  204. REL_EMS:MOV     DX,AX
  205.         MOV     AX,4500H
  206.         INT     67H
  207.         RET
  208. ;========================================[DETECTIONS]========================>
  209.  
  210. DETECT: PUSH    DS CS
  211.         POP     DS
  212.         CALL    EMSDET
  213.         CALL    XMSDET
  214.         CMP     CS:[EMS_],1
  215.         JNE     NINCSEM
  216.         MOV     AX,3
  217.         INT     10H
  218.         LEA     DX,ERRORKA
  219.         MOV     AH,9
  220.         INT     21H
  221.         MOV     AX,4C00H
  222.         INT     21H
  223. NINCSEM:CMP     CS:[XMS_],1
  224.         JE      OK_ALL
  225.         MOV     AX,3
  226.         INT     10H
  227.         LEA     DX,ERRORKB
  228.         MOV     AH,9
  229.         INT     21H
  230.         MOV     AX,4C00H
  231.         INT     21H
  232. OK_ALL: POP     DS
  233.         RET
  234.  
  235. EMSDET: LEA     DX,EMMNAME
  236.         MOV     AX,3D00H
  237.         INT     21H
  238.         CMP     AL,2
  239.         JE      NOT_OK1
  240.         MOV     AH,40H
  241.         INT     67H
  242.         CMP     AH,0
  243.         JNE     NOT_OK1
  244.         MOV     EMS_,1
  245. NOT_OK1:RET
  246.  
  247. XMSDET: MOV     AX,4300H
  248.         INT     2FH
  249.         CMP     AL,80H
  250.         JNE     NOT_OK2
  251.         MOV     XMS_,1
  252. NOT_OK2:RET
  253.  
  254. ;============================================================================>
  255.  
  256. INITMSG:LEA     DX,MSG1
  257.         MOV     AH,9
  258.         INT     21H
  259.         CMP     EMS_,1
  260.         JE      EMSMODE
  261.         CMP     XMS_,1
  262.         JE      XMSMODE
  263.         LEA     DX,MNON
  264.         JMP     WRMSG1
  265. EMSMODE:LEA     DX,MEMS
  266.         JMP     WRMSG1
  267. XMSMODE:LEA     DX,MXMS
  268. WRMSG1: MOV     AH,9
  269.         INT     21H
  270.         RET
  271. ;=============================[HEX->ASCII CONVERTER===========================>
  272.  
  273. ASCii:  PUSH    BX
  274.         XCHG    BP,DX                 ;SAVE HiGH WORD
  275.         MOV     BX,0AH                ;DiViSOR
  276.         MOV     CL,30H                ;CONVERSiON FOR ASCii
  277. RPT1:   CMP     BP,0                  ;ARE WE DONE WiTH HiGH WORDS
  278.         JZ      RPT2                  ;YES
  279.         XCHG    AX,BP                 ;NO-GET HiGH WORD
  280.         XOR     DX,DX                 ;CLEAR DX
  281.         DiV     BX
  282.         XCHG    BP,AX                 ;THiS WiLL BE THE NEW HiGH WORD
  283.         DiV     BX                    ;DiViDE LOW WORD + REMAiNDER
  284.         OR      DL,CL                 ;CONVERT HEX VALUE TO ASCii
  285.         MOV     [Di],DL               ;QUOTiENT iNTO STORAGE
  286.         DEC     Di                    ;STEP BACK ONE BYTE
  287.         JMP     RPT1                  ;GO AGAiN
  288. RPT2:   XOR     DX,DX                 ;CLEAR DX
  289.         DiV     BX
  290.         OR      DL,CL                 ;CONVERT HEX VALUE TO ASCii
  291.         MOV     [Di],DL               ;QUOTiENT iNTO STORAGE
  292.         DEC     Di                    ;STEP BACK ONE BYTE
  293.         CMP     AX,0                  ;ARE WE DONE?
  294.         JNZ     RPT2                  ;NO
  295.         POP     BX
  296.         RET                           ;YES
  297.  
  298. ;=============================[DATAS]=========================================>
  299.  
  300. MSG1    DB      10,13,'XMS DRiVER o.12b BY CYBERDANCER/SHOCK',10,13
  301.         DB      'FREE MEMORY:'
  302. IDEWR:  DB      ' 0000 KiLOBYTES',10,13
  303.         DB      'MODE: $'
  304. MEMS    DB      'EMS',10,13,'$'
  305. MXMS    DB      'XMS',10,13,'$'
  306. MNON    DB      'NO MODE AVAILABLE',10,13,'$'
  307. EMMNAME DB      'EMMXXXX0',0
  308. FUCKOFF DB      'XMS OR EMS ERROR...CODE:'
  309. IDEFCK  DB      ' 0000$'
  310. ERRORKA DB      'PLEASE USE _ONLY_ HIMEM.SYS TO RUN THIS DENTRO!$'
  311. ERRORKB DB      'NO XMS DRIVER DETECTED! (PLEASE USE HIMEM.SYS)$'
  312. EMS_    DB      0
  313. XMS_    DB      0
  314. HANDLE  DW      ?
  315. XMSPTR  DD      ?
  316. EMSPTR  DD      ?
  317. XMSTRUC DB      16  DUP (?)
  318. EMSTRUC DB      18  DUP (?)
  319. HNDLTBL DB      200 DUP (?)
  320.