home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 3 / FREEWARE.BIN / ms_dos / cpu / cpu.asm < prev    next >
Assembly Source File  |  1980-01-02  |  2KB  |  165 lines

  1. comment `
  2.     1990-05-05 Counting in Real Mode Procedure
  3. `
  4.  
  5. .386p
  6.  
  7. rmCPU    SEGMENT    WORD USE16 PUBLIC 'CODE'
  8. rmCPU    ENDS
  9. rmDATA    SEGMENT WORD USE16 PUBLIC 'DATA'
  10. rmDATA    ENDS
  11. CPU    SEGMENT DWORD USE32 PUBLIC 'CODE'
  12. CPU    ENDS
  13. DATA    SEGMENT DWORD USE32 'DATA'
  14. DATA    ENDS
  15.  
  16. DGROUP    GROUP    rmDATA,DATA
  17.     ASSUME  cs:CPU,ds:DGROUP,es:DGROUP
  18.  
  19. CPU    SEGMENT
  20.     PUBLIC    chktime
  21.  
  22. chktime        PROC    NEAR
  23.         push    es
  24.         push    ebx
  25.         push    esi
  26.         push    edi
  27.  
  28.         mov    ax,250fh
  29.         xor    ebx,ebx
  30.         mov    ecx,offset end_of_rm_proc
  31.         int    21h
  32.         jnb    #r1
  33.         mov    eax,-1
  34.         jmp    #exit
  35. #r1:
  36.         mov    ebx,ecx
  37.         mov    bx,offset __chktime
  38.         xor    ecx,ecx
  39.         mov    ax,250eh
  40.         int    21h
  41. #exit:
  42.         pop    edi
  43.         pop    esi
  44.         pop    ebx
  45.         pop    es
  46.         ret            ;32Bit Near Return
  47. chktime        endp
  48.  
  49. CPU        ENDS
  50.  
  51.  
  52. rmCPU    segment
  53.     public    __chktime
  54. __chktime    proc    far
  55.         mov    ax,cs
  56.         mov    ds,ax
  57.  
  58.         mov    di,offset intr
  59.         mov    word ptr [di],1        ; one shot mode
  60.         mov    word ptr [di+2],offset intr_proc
  61.         mov    word ptr [di+4],cs
  62.         mov    word ptr [di+6],0    ; 1 second 
  63.         mov    word ptr [di+8],100
  64.         mov    flag,1
  65.  
  66.         mov    ah,0
  67.         int    97H
  68.         test    ah,ah
  69.         je    #r1
  70.         mov    eax,-1
  71.         jmp    #exit
  72. #r1:
  73.         xor    ax,ax
  74.         xor    bx,bx
  75.         mov    di,1
  76.         mov    si,offset flag
  77.         xor    dx,dx
  78. #loop1:
  79.         cmp    bl,[si]
  80.         je    #break1
  81.         add    ax,di
  82.         adc    dx,bx
  83.         jmp    #loop1
  84. #break1:
  85.         xchg    dx,ax
  86.         shl    eax,16
  87.         mov    ax,dx
  88. #exit:
  89.         ret            ;16Bit Far Return
  90. __chktime    endp
  91.  
  92. public        intr_proc
  93. intr_proc    proc    far
  94.         mov    ax,cs
  95.         mov    ds,ax
  96.         mov    byte ptr [flag],0
  97.         ret
  98. intr_proc    endp
  99.  
  100. rmCPU        ends
  101.  
  102. rmDATA        segment
  103. flag        dw    ?
  104. intr        dw    ?        ;mode
  105.         dd    ?        ;Interrupt Procedure
  106.         dw    ?        ;Clock High Word
  107.         dw    ?        ;Clock Low Word
  108. end_of_rm_proc:
  109. rmDATA        ends
  110.  
  111.  
  112.  
  113. end
  114. ********************************************************************
  115.  
  116.  
  117.  
  118.  
  119.     PUBLIC    _cpuspeed
  120. _cpuspeed    PROC NEAR
  121.     push    di
  122.     push    si
  123.  
  124.     mov    ax,DGROUP
  125.     mov    ds,ax
  126.     mov    di,offset DGROUP:intr
  127.     mov    byte ptr [di],1            ; one shot mode
  128.     mov    word ptr [di+2],offset _chktime
  129.     mov    word ptr [di+4],seg _chktime
  130.     mov    word ptr [di+6],0        ; 1 second 
  131.     mov    word ptr [di+8],100
  132.     mov    flag,1
  133.  
  134.     cli
  135.     mov    ah,0
  136.     int    97H
  137.     test    ah,ah
  138.     je    LS1
  139.     mov    ax,0ffffH
  140.     mov    dx,ax
  141.     sti
  142.     jmp    LB1
  143. LS1:
  144.     xor    ax,ax
  145.     xor    bx,bx
  146.     mov    di,1
  147.     mov    si,offset DGROUP:flag
  148.     xor    dx,dx
  149.     sti
  150. LL1:
  151.     cmp    bl,[si]
  152.     je    LB1
  153.     add    ax,di
  154.     adc    dx,bx
  155.     jmp    LL1
  156. LB1:
  157.     pop    si
  158.     pop    di
  159.     ret
  160.  
  161. _cpuspeed    ENDP
  162.  
  163. _TEXT    ENDS
  164. END
  165.