home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 September / Simtel20_Sept92.cdr / msdos / sysutl / proctype.arc / PROCTYPE.ASM < prev    next >
Assembly Source File  |  1988-10-30  |  2KB  |  66 lines

  1. ;    TITLE    PROCTYPE.ASM
  2. ;
  3. ;Assembly language routine to detect and return processor type
  4. ;Returns AX=86H, 186H, 188H, 288H, 388H, depending on
  5. ;processor type detected.
  6. ;All other regs, flags unchanged.
  7. ;
  8. ;Suggest you only call this routine once and set a global flag
  9. ;accordingly!
  10. ;
  11. ;From Micro Cornucopia magazine #37, Sep-Oct 87
  12. ;Author:    Pat O'Leary
  13. ;        Ardrew, Athy
  14. ;        County Kildare, Ireland
  15. ;Very slightly tweaked by David Kirschbaum, Toad Hall
  16. ;
  17. proc_type    proc    near
  18.     pushf                ;save flags
  19.     xor    ax,ax            ;clear AX
  20.     push    ax            ;push it on the stack
  21.     popf                ;zero the flags
  22.     pushf                ;try to zero bits 12-15
  23.     pop    ax            ;recover flags
  24.     and    ax,0F000H        ;if 12-15 are 1
  25.     cmp    ax,0F000H        ;then processor is
  26.     jz    Is_0_1            ;8018x or 808x
  27.  
  28.     mov    ax,07000H        ;try to set bits 12-14
  29.     push    ax
  30.     popf
  31.     pushf
  32.     pop    ax
  33.     and    ax,07000H        ;if 12-14 are 0
  34.     jz    Is_80286        ;processor is 80286
  35.  
  36. Is_80386:                ;else it's an 80386
  37.     mov    ax,386H            ;return 386
  38.     jmp    short Done        ;TH added the short
  39.  
  40. Is_80286:
  41.     mov    ax,286H            ;return 286
  42.     jmp    short Done        ;TH added the short
  43.  
  44. Is_0_1:                    ;it's 808x or 8018x
  45.     push    cx            ;save CX
  46.     mov    ax,0FFFFH        ;set all AX bits
  47.     mov    cl,33            ;will shift once on 8018x
  48.     shl    ax,cl            ;or 33 times on 808x
  49.     pop    cx            ;TH restore CX NOW! (just 1 time)
  50.     jnz    Is_80186        ;nonzero bits mean 8018x
  51.  
  52. Is_8086:                ;else it's an 8086
  53.     mov    ax,86H            ;return 86
  54. ;TH    pop    cx            ;restore CX
  55.     jmp    short Done        ;TH added the short
  56.  
  57. Is_80186:
  58.     mov    ax,186H            ;return 186
  59. ;TH    pop    cx            ;restore CX
  60.  
  61. Done:
  62.     popf                ;restore original flags
  63.     ret
  64.  
  65. proc_type    endp
  66.