home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 21 / CD_ASCQ_21_040595.iso / dos / prg / c / freedos3 / source / xms / testxms.asm next >
Assembly Source File  |  1980-01-04  |  7KB  |  472 lines

  1. ;==============================================================================
  2. ;==
  3. ;==     Project                 : XMS tester
  4. ;==     Module name             : 
  5. ;==     Author(s)               : Mark E. Huss
  6. ;==     Purpose                 : Very simple XMS tester
  7. ;==
  8. ;==     Created                 : 
  9. ;==
  10. ;==                              Revision history
  11. ;==                              ================
  12. ;==
  13. ;==============================================================================
  14.     page 65,132
  15.  
  16. @Print    MACRO    s1
  17.     IFNB    <s1>
  18.       mov    dx,offset s1
  19.     ENDIF
  20.     mov    ah,9
  21.     int    21h
  22.     ENDM
  23.  
  24. @Putc    MACRO    c1,c2,c3,c4
  25.     mov    ah,2
  26.     IRP    char,<c1,c2,c3,c4>
  27.       IFB    <char>
  28.         EXITM
  29.       ENDIF
  30.       mov    dl,char
  31.       int    21h
  32.     ENDM
  33.     ENDM
  34.  
  35. CSEG    segment
  36.     assume cs:CSEG, ds:CSEG, es:CSEG
  37.  
  38.     org    80h
  39. pcount    db    ?
  40. params    label    byte
  41.  
  42.     org    100h
  43. start:    jmp    sstart
  44.  
  45.     even
  46. hm_vec    label    dword
  47. hmv    dw    ?,?
  48.  
  49. handle1    dw    ?
  50. handle2    dw    ?
  51.  
  52. xmem_move    label    word
  53. length_lo    dw    ?
  54. length_hi    dw    ?
  55. source_h    dw    ?
  56. source_lo    dw    ?
  57. source_hi    dw    ?
  58. dest_h        dw    ?
  59. dest_lo        dw    ?
  60. dest_hi        dw    ?
  61.  
  62. hello    db    13,10,"XMS Test Program",13,10
  63. crlf    db    13,10,"$"
  64.  
  65. aversion db    "Version: $"
  66. req_hm    db    "Request HiMem: $"
  67. rel_hm    db    "Release HiMem: $"
  68. q_a20    db    "Query A20: $"
  69. en_a20    db    "Enable A20: $"
  70. dis_a20    db    "Disable A20: $"
  71. query    db    "Query (largest/total): $"
  72. alloc    db    "Alloc: $"
  73. locke    db    "Lock: $"
  74. unlock    db    "UnLock: $"
  75. handle    db    "HandleInfo: $"
  76. free    db    "Free: $"
  77. moveto    db    "MoveTo: $"
  78. movefr    db    "MoveFrom:"
  79. spc    db    " $"
  80. ok      db      "OK",13,10,"$"
  81.  
  82. err_    db    "XMS Error: $"
  83. no_hm    db    "XMS not found",13,10,"$"
  84. err_fr    db    "'From' data error",13,10,"$"
  85.  
  86. ;------------------------------------------------------------------------------
  87. ; htoa4, htoa2, htoa1 
  88. ;
  89. ; print number in AX as ascii hex
  90. ;
  91. ; Arguments:
  92. ;    AX = number to print
  93. ; Returns:
  94. ;    nothing
  95. ; Alters:
  96. ;    AX, DL
  97. ; Calls:
  98. ;    nothing
  99. ;------------------------------------------------------------------------------
  100. htoa4    proc    near
  101.     push    ax
  102.     xchg    al,ah
  103.     call    htoa2
  104.     pop    ax
  105. htoa2:    push    ax
  106.     REPT    4
  107.     shr    al,1
  108.     ENDM
  109.     call    htoa1
  110.     pop    ax
  111. htoa1:    and    al,0Fh
  112.     add    al,90h
  113.     daa
  114.     adc    al,40h
  115.     daa
  116.     mov    dl,al
  117.     mov    ah,2
  118.     int    21h
  119.     ret
  120. htoa4    endp
  121.  
  122. ;------------------------------------------------------------------------------
  123. fill_buffer    proc    near
  124.     push    cs
  125.     pop    es
  126.     mov    cx,1000h
  127.     mov    di,offset buffer
  128.     cld
  129.     rep    stosw
  130.     ret
  131. fill_buffer    endp
  132. ;------------------------------------------------------------------------------
  133. check_buffer    proc    near
  134.     push    cs
  135.     pop    es
  136.     mov    cx,1000h
  137.     mov    di,offset buffer
  138.     cld
  139.     rep    scasw
  140.     ret
  141. check_buffer    endp
  142. ;------------------------------------------------------------------------------
  143.  
  144. sstart:
  145.     @Print    hello
  146.     mov    ax,4300h
  147.     int    2Fh
  148.     cmp    al,80h
  149.     je    xms_found
  150.     mov    dx,offset no_hm
  151.     jmp    error_exit
  152. xms_found:
  153.     mov    ax,4310h
  154.     int    2Fh
  155.     mov    hmv,bx
  156.     mov    hmv[2],es
  157.     push    cs
  158.     pop    es
  159.  
  160.     @Print    aversion
  161.     mov    ah,0
  162.     call    hm_vec
  163.     call    htoa4
  164.     @Putc    ' '
  165.     mov    ax,bx
  166.     call    htoa4
  167.     @Print    crlf
  168.  
  169.     @Print    query
  170.     mov    ah,8
  171.     sub    bx,bx
  172.     call    hm_vec
  173.     test    bl,bl
  174.     jz    query_ok
  175.     jmp    hm_error
  176.  
  177. query_ok:
  178.     push    dx
  179.     call    htoa4
  180.     @Putc    ' '
  181.     pop    ax
  182.     call    htoa4
  183.     @Print    crlf
  184.  
  185.     @Print    req_hm
  186.     mov    ah,1
  187.     mov    dx,0F000h
  188.     call    hm_vec
  189.     test    ax,ax
  190.     jnz    req_hm_ok
  191.     jmp    hm_error
  192. req_hm_ok:
  193.     @Print    ok
  194.  
  195.     @Print    en_a20
  196.     mov    ah,3
  197.     call    hm_vec
  198.     test    ax,ax
  199.     jnz    en_a20_ok
  200.     jmp    hm_error
  201. en_a20_ok:
  202.  
  203.     @Print    q_a20
  204.     mov    ah,7
  205.     call    hm_vec
  206.     call    htoa4
  207.     @Print    crlf
  208.  
  209.     @Print    dis_a20
  210.     mov    ah,4
  211.     call    hm_vec
  212.     test    ax,ax
  213.     jnz    dis_a20_ok
  214.     jmp    hm_error
  215. dis_a20_ok:
  216.  
  217.     @Print    q_a20
  218.     mov    ah,7
  219.     call    hm_vec
  220.     call    htoa4
  221.     @Print    crlf
  222.  
  223.     @Print    rel_hm
  224.     mov    ah,2
  225.     call    hm_vec
  226.     test    ax,ax
  227.     jnz    rel_hm_ok
  228.     jmp    hm_error
  229. rel_hm_ok:
  230.     @Print    ok
  231.  
  232.     @Print    alloc
  233.     mov    dx,64
  234.     mov    ah,9
  235.     call    hm_vec
  236.     test    ax,ax
  237.     jnz    alloc1_ok
  238.     jmp    hm_error
  239. alloc1_ok:
  240.     mov    handle1,dx
  241.     mov    ax,dx
  242.     call    htoa4
  243.     @Print    crlf
  244.     
  245.     @Print    handle
  246.     mov    dx,handle1
  247.     mov    ah,0Eh
  248.     call    hm_vec
  249.     test    ax,ax
  250.     jnz    hand1_ok
  251.     jmp    hm_error
  252. hand1_ok:
  253.     mov    ax,dx
  254.     call    htoa4
  255.     @Print    spc
  256.     mov    al,bh
  257.     call    htoa2
  258.     @Print    spc
  259.     mov    al,bl
  260.     call    htoa2
  261.     @Print    crlf
  262.  
  263.     @Print    locke
  264.     mov    ah,0Ch
  265.     mov    dx,handle1
  266.     call    hm_vec
  267.     test    ax,ax
  268.     jnz    lock_ok
  269.     jmp    hm_error
  270. lock_ok:
  271.     mov    ax,dx
  272.     call    htoa4
  273.     mov    ax,bx
  274.     call    htoa4
  275.     @Print    crlf
  276.  
  277.     @Print    unlock
  278.     mov    ah,0Dh
  279.     mov    dx,handle1
  280.     call    hm_vec
  281.     test    ax,ax
  282.     jnz    unlock_ok
  283.     jmp    hm_error
  284. unlock_ok:
  285.     @Print    ok
  286.  
  287.     @Print    alloc
  288.     mov    dx,64
  289.     mov    ah,9
  290.     call    hm_vec
  291.     test    ax,ax
  292.     jnz    alloc2_ok
  293.     jmp    hm_error
  294. alloc2_ok:
  295.     mov    handle2,dx
  296.     mov    ax,dx
  297.     call    htoa4
  298.     @Print    crlf
  299.  
  300.     @Print    handle
  301.     mov    dx,handle2
  302.     mov    ah,0Eh
  303.     call    hm_vec
  304.     test    ax,ax
  305.     jnz    hand2_ok
  306.     jmp    hm_error
  307. hand2_ok:
  308.     mov    ax,dx
  309.     call    htoa4
  310.     @Print    spc
  311.     mov    al,bh
  312.     call    htoa2
  313.     @Print    spc
  314.     mov    al,bl
  315.     call    htoa2
  316.     @Print    crlf
  317.  
  318.     @Print    locke
  319.     mov    ah,0Ch
  320.     mov    dx,handle2
  321.     call    hm_vec
  322.     test    ax,ax
  323.     jnz    lock2_ok
  324.     jmp    hm_error
  325. lock2_ok:
  326.     mov    ax,dx
  327.     call    htoa4
  328.     mov    ax,bx
  329.     call    htoa4
  330.     @Print    crlf
  331.  
  332.     @Print    unlock
  333.     mov    ah,0Dh
  334.     mov    dx,handle2
  335.     call    hm_vec
  336.     test    ax,ax
  337.     jnz    unlock2_ok
  338.     jmp    hm_error
  339. unlock2_ok:
  340.     @Print    ok
  341.  
  342.     @Print    moveto
  343.     mov    ax,101h
  344.     call    fill_buffer
  345.     mov    length_lo,2000h
  346.     mov    source_h,0
  347.     mov    source_lo,offset buffer
  348.     mov    source_hi,ds
  349.     mov    ax,handle1
  350.     mov    dest_h,ax
  351.     mov    dest_lo,0        
  352.     mov    dest_hi,0
  353.     mov    ah,0Bh
  354.     mov    si,offset xmem_move
  355.     call    hm_vec
  356.     test    ax,ax
  357.     jnz    move1_ok
  358.     jmp    hm_error
  359. move1_ok:
  360.     @Print    ok
  361.  
  362.     @Print    moveto
  363.     mov    ax,202h
  364.     call    fill_buffer
  365.     mov    length_lo,2000h
  366.     mov    source_h,0
  367.     mov    source_lo,offset buffer
  368.     mov    source_hi,ds
  369.     mov    ax,handle2
  370.     mov    dest_h,ax
  371.     mov    dest_lo,0        
  372.     mov    dest_hi,0
  373.     mov    ah,0Bh
  374.     mov    si,offset xmem_move
  375.     call    hm_vec
  376.     test    ax,ax
  377.     jnz    move2_ok
  378.     jmp    hm_error
  379. move2_ok:
  380.     @Print    ok
  381.     
  382.     sub    ax,ax
  383.     call    fill_buffer
  384.  
  385.     @Print    movefr
  386.     mov    length_lo,2000h
  387.     mov    ax,handle1
  388.     mov    source_h,ax
  389.     mov    source_lo,0
  390.     mov    source_hi,0
  391.     mov    dest_h,0
  392.     mov    dest_lo,offset buffer    
  393.     mov    dest_hi,ds
  394.     mov    ah,0Bh
  395.     mov    si,offset xmem_move
  396.     call    hm_vec
  397.     test    ax,ax
  398.     jnz    move3_ok
  399.     jmp    hm_error
  400. move3_ok:
  401.     @Print    ok
  402.     mov    ax,101h
  403.     call    check_buffer
  404.     jz    buff1_ok
  405.     mov    dx,offset err_fr
  406.     jmp    error_exit
  407. buff1_ok:
  408.  
  409.     @Print    movefr
  410.     mov    length_lo,2000h
  411.     mov    ax,handle2
  412.     mov    source_h,ax
  413.     mov    source_lo,0
  414.     mov    source_hi,0
  415.     mov    dest_h,0
  416.     mov    dest_lo,offset buffer    
  417.     mov    dest_hi,ds
  418.     mov    ah,0Bh
  419.     mov    si,offset xmem_move
  420.     call    hm_vec
  421.     test    ax,ax
  422.     jnz    move4_ok
  423.     jmp    hm_error
  424. move4_ok:
  425.     @Print    ok
  426.     mov    ax,202h
  427.     call    check_buffer
  428.     jz    buff2_ok
  429.     mov    dx,offset err_fr
  430.     jmp    error_exit
  431. buff2_ok:
  432.  
  433.     @Print    free
  434.     mov    dx,handle2
  435.     mov    ah,0Ah
  436.     call    hm_vec
  437.     test    ax,ax
  438.     jnz    free2_ok
  439.     jmp    hm_error
  440. free2_ok:
  441.     @Print    ok
  442.  
  443.     @Print    free
  444.     mov    dx,handle1
  445.     mov    ah,0Ah
  446.     call    hm_vec
  447.     test    ax,ax
  448.     jnz    free1_ok
  449.     jmp    hm_error
  450. free1_ok:
  451.     @Print    ok
  452.  
  453. exit:
  454.     mov    ax,4C00h
  455.     int    21h
  456.  
  457. hm_error:
  458.     @Print    err_
  459.     mov    al,bl
  460.     call    htoa2
  461.     mov    dx,offset crlf
  462. error_exit:
  463.     @Print
  464.     mov    ax,4C01h
  465.     int    21h
  466.  
  467.     even
  468. buffer:
  469.  
  470. CSEG    ends
  471.     end    start
  472.