home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / utils / dtu140 / dtu-api.asm next >
Encoding:
Assembly Source File  |  1995-03-13  |  6.1 KB  |  157 lines

  1. ;=============================================================================
  2.  
  3. ;                 Some example code for the DTU API...
  4.  
  5. ;=============================================================================
  6.  
  7.  
  8.  
  9. Code Segment
  10.  
  11.      Assume Cs:Code,Ds:Code
  12.  
  13.      Org 100h
  14.  
  15.      .386
  16.  
  17. Start:
  18.  
  19.      Mov      Ah,9
  20.  
  21.      Mov      Dx,Offset Welcome
  22.  
  23.      Int      21h                      ;Print the Welcome String...
  24.  
  25.      Sub      Ax,Ax                    ;Start checking Multiplex Number 0
  26.  
  27. CheckLoop:
  28.  
  29.      Push     Ax                       ;Save current Mux Number
  30.  
  31.      Int      2Dh                      ;Installation check
  32.  
  33.      Or       Al,Al                    ;Is there a program installed here ?
  34.  
  35.      Pop      Ax                       ;Restore Mux Number
  36.  
  37.      Jnz      ProgramInstalled         ;Program installed -> Jump
  38.  
  39. NextCheck:
  40.  
  41.      Inc      Ah                       ;No program installed -> Try next Mux
  42.  
  43.      Jnz      CheckLoop                ;Loop max. 256 times...
  44.  
  45. DTUNotInstalled:
  46.  
  47.      Mov      Ah,9                     ;DTU not found at one of 256 Mux's
  48.  
  49.      Mov      Dx,Offset NoDTUStr
  50.  
  51.      Int      21h                      ;Print DTU not installed
  52.  
  53.      Int      20h                      ;End program...
  54.  
  55. ProgramInstalled:
  56.  
  57.      Pusha                             ;Save all registers
  58.  
  59.      Mov      Es,Dx                    ;Set ES:DI to program signature
  60.  
  61.      Mov      Si,Offset DTUSignature   ;Compare to DTU's signature
  62.  
  63.      Mov      Cx,16
  64.  
  65.      Rep      Cmpsb                    ;Compare strings
  66.  
  67.      Popa                              ;Restore all registers
  68.  
  69.      Jnz      NextCheck                ;Strings not equal -> Scan next program
  70.  
  71. DTUFound:
  72.  
  73.      Mov      [DTUNumber],Ah           ;Save Multiplex Number
  74.  
  75.      Mov      Ah,9
  76.  
  77.      Mov      Dx,Offset DTUFoundStr
  78.  
  79.      Int      21h                      ;Print DTU found
  80.  
  81.      Mov      Al,Ch                    ;Move Major Version Number into AL
  82.  
  83.      Call     PrintBCD                 ;Print Major Version Number
  84.  
  85.      Mov      Ah,2                     ;Subfunction 2: Print character
  86.  
  87.      Mov      Dl,'.'                   ;The character...
  88.  
  89.      Int      21h                      ;Print...
  90.  
  91.      Mov      Al,Cl                    ;Move Minor Version Number into AL
  92.  
  93.      Call     PrintBCD                 ;Print Minor Version Number
  94.  
  95.      Mov      Ah,9
  96.  
  97.      Mov      Dx,Offset ExtAPIStr
  98.  
  99.      Int      21h
  100.  
  101.      Mov      Ah,[DTUNumber]
  102.  
  103.      Mov      Al,10h
  104.  
  105.      Int      2Dh
  106.  
  107.      Mov      Al,Bl
  108.  
  109.      Mov      [ExtendedAPI],Al
  110.  
  111.      Call     PrintYesNo
  112.  
  113.      Cmp      [ExtendedAPI],1
  114.  
  115.      Jnz      NoExtAPIInfo
  116.  
  117.      Mov      Ah,9
  118.  
  119.      Mov      Dx,Offset NumUnitsStr
  120.  
  121.      Int      21h
  122.  
  123.      Mov      Ah,[DTUNumber]
  124.  
  125.      Mov      Al,11h
  126.  
  127.      Sub      Bl,Bl
  128.  
  129.      Int      2Dh                      ;Get # of units
  130.  
  131.      Mov      Al,Bl
  132.  
  133.      Movzx    Cx,Al                    ;Load number of units in CX
  134.  
  135.      Call     PrintBCD
  136.  
  137.      Mov      Ah,[DTUNumber]
  138.  
  139.      Mov      Al,11h
  140.  
  141.      Mov      Bl,1
  142.  
  143.      Mov      Dx,Cs
  144.  
  145.      Mov      Di,Offset UnitBuf
  146.  
  147.      Int      2Dh
  148.  
  149.      Mov      Ah,9
  150.  
  151.      Mov      Dx,Offset InstallStr
  152.  
  153.      Int      21h
  154.  
  155.      Mov      Si,Offset UnitBuf
  156.  
  157. PrintLoop:
  158.  
  159.      Lodsb
  160.  
  161.      Call     PrintBCD
  162.  
  163.      Mov      Ah,2
  164.  
  165.      Mov      Dl,' '
  166.  
  167.      Int      21h
  168.  
  169.      Loop     PrintLoop
  170.  
  171. NoExtAPIInfo:
  172.  
  173.      Mov      Ah,9
  174.  
  175.      Mov      Dx,Offset Int3Str
  176.  
  177.      Int      21h
  178.  
  179.      Int      03h                      ;Call DTU through INT 03
  180.  
  181.      Cmp      [ExtendedAPI],1
  182.  
  183.      Jnz      NoExtAPIPopup
  184.  
  185.      Mov      Ah,9
  186.  
  187.      Mov      Dx,Offset Sub3Str
  188.  
  189.      Int      21h
  190.  
  191.      Mov      Ah,[DTUNumber]
  192.  
  193.      Mov      Al,3
  194.  
  195.      Int      2Dh                      ;Call DTU through INT 2D/03
  196.  
  197. NoExtAPIPopup:
  198.  
  199.      Mov      Ah,9
  200.  
  201.      Mov      Dx,Offset EndStr
  202.  
  203.      Int      21h
  204.  
  205.      Int      20h
  206.  
  207.  
  208.  
  209. PrintYesNo Proc Near
  210.  
  211.      Pusha
  212.  
  213.      Mov      Dx,Offset YesNo
  214.  
  215.      Not      Al
  216.  
  217.      And      Al,1
  218.  
  219.      Shl      Al,2
  220.  
  221.      Sub      Ah,Ah
  222.  
  223.      Add      Dx,Ax
  224.  
  225.      Mov      Ah,9
  226.  
  227.      Int      21h
  228.  
  229.      Popa
  230.  
  231.      Ret
  232.  
  233. Endp
  234.  
  235.  
  236.  
  237. PrintBCD Proc Near
  238.  
  239.      Pusha                             ;Save all registers
  240.  
  241.      Push     Ax                       ;Save AX
  242.  
  243.      Shr      Al,4                     ;Move upper BCD Number into low bits
  244.  
  245.      Add      Al,'0'                   ;Add '0' to become number in ASCII
  246.  
  247.      Mov      Ah,2                     ;Print character with DOS Function 2
  248.  
  249.      Mov      Dl,Al
  250.  
  251.      Int      21h                      ;Print...
  252.  
  253.      Pop      Ax                       ;Restore AX
  254.  
  255.      And      Al,0Fh                   ;Mask out lower BCD Number
  256.  
  257.      Add      Al,'0'                   ;Add '0' to become number in ASCII
  258.  
  259.      Mov      Ah,2                     ;Print character with DOS Function 2
  260.  
  261.      Mov      Dl,Al
  262.  
  263.      Int      21h                      ;Print...
  264.  
  265.      Popa                              ;Restore all registers
  266.  
  267.      Ret                               ;Return...
  268.  
  269. Endp
  270.  
  271.  
  272.  
  273. Welcome       Db    13,10,'DTown Utilities API Example Program.',13,10,13,10,'$'
  274.  
  275. NoDTUStr      Db    'DTU is not installed...',13,10,'$'
  276.  
  277. DTUFoundStr   Db    'DTU installed:  DTU Version               : $'
  278.  
  279. ExtAPIStr     Db    13,10,'                Extended API Installed    : $'
  280.  
  281. NumUnitsStr   Db    13,10,'                Total number of units     : $'
  282.  
  283. InstallStr    Db    13,10,'                Units installed           : $'
  284.  
  285. Int3Str       Db    13,10,'                Calling DTU with INT 03h...$'
  286.  
  287. Sub3Str       Db    13,10,'                Calling DTU with INT 2Dh, Function 03h...$'
  288.  
  289. EndStr        Db    13,10,13,10,'DTU tested OK...',13,10,13,10,'$'
  290.  
  291.  
  292.  
  293. ExtendedAPI   Db    0                  ;1=Extended API installed, 0=not...
  294.  
  295. HandlerOfs    Dw    0                  ;Stored Pop-up Handler Offset
  296.  
  297. HandlerSeg    Dw    0                  ;Stored Pop-up Handler Segment
  298.  
  299. DTUNumber     Db    0                  ;Multiplex Number for DTU
  300.  
  301. DTUSignature  Db    'DTown SDDTU     ' ;DTU's Signature
  302.  
  303. UnitBuf       Db    100 Dup(0)
  304.  
  305. YesNo         Db    'Yes$No$'
  306.  
  307.  
  308.  
  309. Code Ends
  310.  
  311.      End Start
  312.  
  313.