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

  1.     TITLE    CHEKPROC.ASM
  2. ;
  3. ;Demo program to test PROCTYPE.ASM (return processor type)
  4. ;
  5. ;This little demo (1) posts a global byte variable to 0,1,2, or 3,
  6. ;depending on the type processor (8086/88, 80186/188, 80286, or 80386). 
  7. ;
  8. ;You can then write processor-dependent procedures and branch to the
  9. ;appropriate one, depending on the type processor detected!
  10. ;In this demo, I converted the word-sized AX return value (86H..386H)
  11. ;to a byte value (0..3) for ease in table lookups, etc.
  12. ;
  13. ;I also included some global definitions (1) to keep MASM busy,
  14. ;and (2) to make it easier on the poor programmer's memory!
  15. ;
  16. ;Returns:
  17. ;(1) a screen display of what CPU was discovered
  18. ;(2) DOS ERRORLEVEL of 0..4, depending on type CPU
  19. ;
  20. ;David Kirschbaum
  21. ;Toad Hall
  22. ;kirsch@braggvax.ARPA
  23.  
  24. CPU88    EQU    0            ;8086/8088
  25. CPU186    EQU    1            ;80186/80188
  26. CPU286    EQU    2            ;80286
  27. CPU386    EQU    3            ;80386
  28. CR    equ    0DH
  29. LF    equ    0AH
  30.  
  31. CSEG    SEGMENT PUBLIC PARA 'CODE'
  32.     ASSUME    CS:CSEG, DS:CSEG, ES:CSEG
  33.     ORG    100H            ;a .COM program
  34.  
  35. ChekProc    proc    near
  36.     jmp    Start            ;skip over data
  37.  
  38. chkmsg    db    'Checking for CPU type... $'
  39. cpumsg    db    'discovered $'
  40.  
  41. typ88    db    '8086/8088$'
  42. typ186    db    '80186/80188$'
  43. typ286    db    '80286$'
  44. typ386    db    '80386$'
  45. typunk    db    'Unknown$'
  46.  
  47. crlf    db    CR,LF,'$'
  48.  
  49. typtbl    dw    typ88,typ186,typ286,typ386,typunk
  50.  
  51. cputyp    db    ?            ;global variable
  52. ChekProc    endp
  53.  
  54.     INCLUDE PROCTYPE.ASM        ;include the procedure
  55.  
  56. Start    proc    near
  57.     mov    dx,offset chkmsg    ;'Checking for...'
  58.     mov    ah,9            ;DOS display msg
  59.     int    21H
  60.     
  61.     call    Proc_Type        ;returns CPU type in AX
  62.     xor    bx,bx            ;BX=0 (assume 8086/88)
  63.     cmp    ax,86H            ;8086/88?
  64.     je    Got_Cpu            ;yep
  65.     inc    bx            ;BX=1 (80186/188)
  66.     cmp    ax,186H            ;?
  67.     je    Got_Cpu            ;yep
  68.     inc    bx            ;BX=2 (80286)
  69.     cmp    ax,286H            ;?
  70.     je    Got_Cpu            ;yep
  71.     inc    bx            ;BX=3 (80386)
  72.     cmp    ax,386H            ;?
  73.     je    Got_Cpu            ;yep
  74.     inc    bx            ;bump to 4 (unknown)
  75.  
  76. Got_Cpu:
  77.     push    bx            ;save CPU type a sec
  78.     shl    bx,1            ;*2 for words
  79.     mov    dx,offset cpumsg    ;'discovered '
  80.     mov    ah,9            ;display msg
  81.     int    21H
  82.  
  83.     mov    dx,[bx+typtbl]        ;get cpu-type string offset
  84.     mov    ah,9            ;display msg
  85.     int    21H
  86.     mov    dx,offset crlf        ;make display neat
  87.     mov    ah,9            ;display msg
  88.     int    21H
  89.  
  90.     pop    ax            ;restore CPU type (0..4)
  91.     mov    cputyp,al        ;save 0..4 in global variable
  92.                     ;nonfunctional here, really
  93.     mov    ah,4CH            ;terminate (ERRORLEVEL = CPU type)
  94.     int    21H
  95. Start    endp
  96.  
  97. CSEG    ENDS
  98.     end    ChekProc
  99.