home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9303 / asmtrick / cpu.asm next >
Encoding:
Assembly Source File  |  1993-06-03  |  2.2 KB  |  82 lines

  1. ;*=========================================================*
  2. ;*                          CPU.ASM                        *
  3. ;*           (C) 1993 Tilo Batsch & DMV-Verlag             *
  4. ;*     Dieses Modul enthält die als extern deklarierten    *
  5. ;*                    Funktionen von SI.C.                 *
  6. ;*                                                         *
  7. ;* Assembler: TASM/MASM                                    *
  8. ;==========================================================*
  9. .286
  10. .MODEL SMALL
  11.  
  12. ;NOSMART ab TASM 2.0
  13.  
  14. .DATA
  15.  
  16. old_handler DD  ?
  17.  
  18. .CODE
  19. EXTRN DOSSETVEC: FAR         ; oder entsprechend nachbilden
  20.  
  21. Handler PROC FAR
  22.   PUSH BP
  23.   MOV BP,SP
  24.  
  25.   ; vorgegebener Prozessortyp ist es nicht!
  26.   DEC DL
  27.  
  28.   ; nach der Anweisung wieder aufsetzen
  29.   MOV WORD PTR [BP+2],OFFSET tEnde
  30.  
  31.   POP BP
  32.   IRET
  33. Handler ENDP
  34.  
  35. ; C-Deklaration: int _cpu_typ(void);
  36. ; Eingabe: --
  37. ; Rückgabe: in AX
  38. ; CPU: 2 = 80286, 3 = 80386, 4 = 80486
  39. __CPU_TYP PROC                        ; Auf 286-486 prüfen
  40.   PUBLIC __CPU_TYP
  41.  
  42.   PUSH 6                              ; Behandlungsroutine
  43.                                       ; für
  44.                                       ; »Ungültiger Befehl«
  45.   PUSH CS
  46.   PUSH OFFSET Handler                 ; Adresse der
  47.                                       ; Behandlungsroutine
  48.   PUSH DS
  49.   PUSH OFFSET old_handler             ; Adresse der alten
  50.                                       ; Behandlungsroutine
  51.   CALL DOSSETVEC
  52.  
  53.   MOV DX, 3                           ; 80386
  54. .386
  55. T386:
  56.   MOV EAX, 1
  57. ;.486
  58.   MOV DX,4                            ; 80486
  59. T486:
  60.   DB 66H, 0FH, 0C8H                   ; BSWAP EAX, ab 486'er
  61. .286
  62.  
  63. tEnde:
  64.   PUSH 6                              ; alte Routine wieder
  65.                                       ; herstellen
  66.   PUSH WORD PTR [old_handler+2]
  67.   PUSH WORD PTR [old_handler]         ; Adresse der alten
  68.                                       ; Routine
  69.   PUSH DS
  70.   PUSH OFFSET old_handler
  71.   CALL DOSSETVEC
  72.  
  73.   MOV AX,DX                           ; Rückgabe in AX
  74.   RET
  75. __CPU_TYP ENDP
  76.  
  77. END
  78. ;*=========================================================*
  79. ;*                     Ende von CPU.ASM                    *
  80.  
  81.  
  82.