;Name:     CPUMODE.ASM
;Function: Report current CPU working mode
;Version : 0.1b
;Author  : Purple Endurer
;Develop Environment : Microsoft (R) Programmer's WorkBench version 2.1.49
;
;Note:   Options -> Project Templates -> Set Project Template...
;        Select "DOS COM"
;
;Date          summary
;Mar 23, 2002  Created
;Apr  5, 2002  Added EMM detector
;Apr  6, 2002  Added china messages
.286

cseg segment
     assume  cs:cseg,  ds:cseg
     ORG 100h

Start:

      mov   ax, 1100h
      mov   bh, 10h
      mov   bl, 0
      mov   cx, 1
      mov   dx, 0bbh
      mov   bp,  offset huang1
      int  10h
      mov   dx, 0c6h
      mov   bp,  offset huang2
      int  10h
      mov   dx, 0d6h
      mov   bp,  offset zhi1
      int  10h
      mov   dx, 0beh
      mov   bp,  offset zhi2
      int  10h
      mov   dx, 0b1h
      mov   bp,  offset bin1
      int  10h
      mov   dx, 0f3h
      mov   bp,  offset bin2
      int  10h
      mov   dx, 0b9h
      mov   bp,  offset gong1
      int  10h
      mov   dx, 0a4h
      mov   bp,  offset gong2
      int  10h
      mov   dx, 0d7h
      mov   bp,  offset zhuo1
      int  10h
      mov   dx, 0f7h
      mov   bp,  offset zhuo2
      int  10h
      mov   dx, 0c4h
      mov   bp,  offset mo1
      int  10h
      mov   dx, 0a3h
      mov   bp,  offset mo2
      int  10h
      mov   dx, 0cah
      mov   bp,  offset shi1
      int  10h
      mov   dx, 0bdh
      mov   bp,  offset shi2
      int  10h
      mov   bx,  offset strMyname
      mov   cx, 6

lblUnlock:

      add  byte  ptr [ bx], 0b1h
      inc  bx
      loop lblUnlock

      mov   dx,  offset strMsg
      mov   ah, 09h
      int  21h

      mov   dx,  offset strReal
      smsw  cx
      ;jcxz lblReport
      test  cx, 1
      je lblReport
      mov  dx,  offset strProtected

lblReport:

      mov  ah, 09h
      int 21h

      mov   ax, 3567h
      int  21h
      mov   di, 0ah
      mov   si,  offset strEmmName
      mov   cx, 8
      cld
      repz  cmpsb

      jnz  lblEnd
      mov   ah, 09h
      mov   dx,  offset strEmmActive
      int  21h

lblEnd:
      mov   dx,  offset strWaitMsg
      mov   ah, 09h
      int  21h
      mov   ah, 08h
      int  21h
      mov   ax, 1104h
      mov   bl, 0
      int  10h
      mov   ax, 4c00h
      int  21h
;----------------------------------
     strEmmName       db  "EMMXXXX0"
     strEmmActive  db 0ah, 0dh, "EMM386 Active!$"
     strMsg   db  "CPU MODE Reportor V0.1b"
          db 0dh, 0ah
          db  "Copyright (c) "
     strMyname     db 0ah, 15h, 25h, 0dh, 00h, 042h
          db  " Apr 6, 2002. All rights reserved!"
          db  0ah, 0dh
              db  "CPU", 0b9h, 0a4h, 0d7h, 0f7h, 0c4h, 0a3h, 0cah, 0bdh, ": $"
     strReal  db  "Real$"
     strProtected  db  "Protected$"
     strWaitMsg    db 0dh, 0ah, "Press any key to end...$"

     huang1  db 04H, 4H, 3fH, 4H, 4H, 0ffH, 1H, 1fH, 11H, 1fH, 11H, 1fH, 10H, 4H, 18H, 60H
     huang2  db 040H, 50H, 0f8H, 40H, 44H, 0feH, 10H, 0f8H, 10H, 0f0H, 10H, 0f0H, 0H, 60H, 18H, 4H
     zhi1    db 01H, 1H, 1H, 0ffH, 1H, 1H, 1H, 3fH, 0H, 2H, 11H, 50H, 50H, 90H, 0fH, 0H
     zhi2    db 0H, 0H, 4H, 0feH, 0H, 0H, 10H, 0f8H, 0H, 0H, 80H, 84H, 12H, 12H, 0f0H, 0H
     bin1    db 0H, 20H, 11H, 0H, 0fcH, 0bH, 48H, 28H, 29H, 11H, 29H, 25H, 45H, 81H, 3H, 0H
     bin2    db 10H, 10H, 0f4H, 12H, 10H, 0feH, 10H, 50H, 50H, 70H, 50H, 48H, 48H, 6aH, 86H, 2H

     gong1  db 0H, 0H, 07fH, 1H, 1H, 1H, 1H, 1H, 1H, 1H, 1H, 1H,/
          01H, 0ffH, 0H, 0H
     gong2  db 0H, 08H, 0fcH, 0H, 0H, 0H, 0H, 0H, 0H, 0H, 0H, 0H, 04H,/
          0feH, 0H, 0H
     zhuo1  db 09H, 09H, 09H, 11H, 12H, 32H, 54H, 98H, 10H, 10H,/
          10H, 10H, 10H, 10H, 10H, 10H
     zhuo2  db 0H, 0H, 04H, 0feH, 80H, 80H, 90H, 0f8H, 80H, 80H, 88H,/
          0fcH, 80H, 80H, 80H, 80H
     mo1    db 11H, 11H, 1fH, 11H, 0fdH, 13H, 32H, 3bH, 56H, 53H, 90H,/
          1fH, 10H, 10H, 11H, 16H
     mo2    db 10H, 14H, 0feH, 10H, 18H, 0fcH, 08H, 0f8H, 08H, 0f8H,/
          40H, 0feH, 040H, 0b0H, 0eH, 04H
     shi1   db 0H, 0H, 0H, 0H, 0ffH, 0H, 0H, 3eH, 08H, 08H, 08H, 09H,/
          0eH, 70H, 20H, 0H
     shi2   db 80H, 0a0H, 90H, 84H, 0feH, 80H, 80H, 80H, 80H, 40H,/
          40H, 20H, 22H, 12H, 0aH, 04H
;=================================
cseg  ends
      end