; optimize the code for size
macro add arg1,arg2
 {
   if arg1 in <eax,ebx,ecx,edx,esi,edi,ebp,esp>
      if arg2 eqtype 0
	 if arg2 = 1
	    inc arg1
	 else
	    add arg1,arg2
	 end if
      else
	 add arg1,arg2
      end if
   else
      add arg1,arg2
   end if
 }

macro sub arg1,arg2
 {
   if arg2 eqtype 0
      if arg2 = 1
	 dec arg1
      else
	 sub arg1,arg2
      end if
   else
      sub arg1,arg2
   end if
 }

macro mov arg1,arg2
 {
   if arg1 in <eax,ebx,ecx,edx,esi,edi,ebp,esp>
      if arg2 eqtype 0
	 if arg2 = 0
	    xor arg1,arg1
	 else if arg2 = 1
	    xor arg1,arg1
	    inc arg1
	 else if arg2 = -1
	    or	arg1,-1
	 else if arg2 > -128 & arg2 < 128
	    push arg2
	    pop  arg1
	 else
	    mov  arg1,arg2
	 end if
      else
	 mov arg1,arg2
      end if
   else
      mov arg1,arg2
   end if
 }


; Interface

macro Window xStart,yStart,xSize,ySize,bColor,gColor,fColor
{
 mov ebx,xStart
 shl ebx,16
 add ebx,xSize
 mov ecx,yStart
 shl ecx,16
 add ecx,ySize
 mov edx,bColor
 mov esi,gColor
 mov edi,fColor
 xor eax,eax
 int 0x40
}


;WriteTextToWindow
macro Text xStart,yStart,rgbColor,pText,nTextLen
{
 mov ebx,xStart
 shl ebx,16
 add ebx,yStart
 mov ecx,rgbColor
 mov edx,pText
 mov esi,nTextLen
 mov eax,4
 int 0x40
}

;DisplayNumber
macro Number xStart,yStart,nPrintType,noOfDigits,Data,rgbColor
{

 mov edx,xStart
 shl edx,16
 add edx,yStart
 mov ebx,noOfDigits
 shl ebx,16
 or ebx,nPrintType
 mov ecx,Data
 mov esi,rgbColor
 mov eax,47
 int 0x40
}

macro DrawLine xStart,xEnd,yStart,yEnd,rgbColor
{
 mov ebx,xStart
 shl ebx,16
 add ebx,xEnd
 mov ecx,yStart
 shl ecx,16
 add ecx, yEnd
 mov edx,rgbColor
 mov eax,38
 int 0x40
}

macro PutImage xPos,yPos,xImage,yImage,pImage
{
 mov ecx,xImage
 shl ecx,16
 add ecx, yImage
 mov edx,xPos
 shl edx,16
 add edx,yPos
 mov ebx,pImage
 mov eax,7
 int 0x40
}

macro Button xStart,yStart,xSize,ySize,nID,rgbColor
{
 mov ebx,xStart
 shl ebx,16
 add ebx,xSize
 mov ecx,yStart
 shl ecx,16
 add ecx,ySize
 mov edx,nID
 mov esi,rgbColor
 mov eax,8
 int 0x40
}

macro CreateTread EntryPoint,StackPos
{
 xor ebx,ebx
 inc ebx
 mov ecx,EntryPoint
 mov edx,StackPos
 mov eax,51
 int 0x40
}


;//////////////////////////////////////////////
;Decoding Brand ID for Intel



decodebrand:


cmp dword[smallvendor], 'cAMD'
jz amd_br
cmp dword[smallvendor], 'ntel'
jz intel_br
jmp Bi00   ; if not AMD or Intel

amd_br:      ;;;;;;;;;;;;;;;;;;;;; amd brand

xor eax,eax
inc eax
cpuid

cnnn0:
cmp bl, 00h
ja rr
je cnnn1

rr:
mov byte [brand], bl ;
Text 275,210,0x00000000,abrand00, abrand00len-abrand00
jmp B000
;jmp comppp

cnnn1:

mov	eax, 0x80000001 	      ; CPUID ext. function 0x80000001
cpuid

cmp ebx, 0
je Bi00
mov word [brand], bx ;

comppp:
cmp  [brand], 400h
jl res1
cmp  [brand], 500h
jl res2
jae res3


res1:
Text 275,210,0x00000000,abrand0, abrand0len-abrand0
jmp B000

res2:
Text 275,210,0x00000000,abrand1, abrand1len-abrand1
jmp B000

res3:
Text 275,210,0x00000000,abrand2, abrand2len-abrand2
jmp B000
	     ;;;;;;;;;;;;;;;;;;;;; intel brand
intel_br:
      xor eax,eax
      inc eax
      cpuid
cmp0:
cmp bl, 00h
je Bi00

cmp1:
cmp bl, 01h
je Bi01

cmp2:
cmp bl, 02h
je Bi02

cmp3:
cmp bl, 03h
je Bi03

cmp4:
cmp bl, 04h
je Bi04

cmp6:
cmp bl, 06h
je Bi06

cmp7:
cmp bl, 07h
je Bi07

cmp8:
cmp bl, 08h
je Bi08

cmp9:
cmp bl, 09h
je Bi09

cmpA:
cmp bl, 0Ah
je Bi0A

cmpB:
cmp bl, 0Bh
je Bi0B

cmpC:
cmp bl, 0Ch
je Bi0C

cmpE:
cmp bl, 0Eh
je Bi0E

cmpF:
cmp bl, 0Fh
je Bi0F

cmp11:
cmp bl, 11h
je Bi11

cmp12:
cmp bl, 12h
je Bi12

cmp13:
cmp bl, 13h
je Bi13

cmp14:
cmp bl, 14h
je Bi14

cmp15:
cmp bl, 15h
je Bi15

cmp16:
cmp bl, 16h
je Bi16

cmp17:
cmp bl, 17h
je Bi17

jne Bi00

;------------------
Bi00:
mov byte [brand], bl ;00h
Text 65,270,0x00000000,brand0, brand0len-brand0
;Number 275,200,1*256,2,dword [brand],0x000000     was in v. 1.11
jmp B000

Bi01:
mov [brand], 01h
Text 65,270,0x00000000,brand01, brand01len-brand01
jmp B000

Bi02:
mov [brand], 02h
Text 65,270,0x00000000,brand02, brand02len-brand02
jmp B000

Bi03:
mov [brand], 03h

cmp [m], 8
je E3
Text 65,270,0x00000000,brand03, brand03len-brand03
jmp B000
E3:
Text 65,270,0x00000000,brand03d, brand03dlen-brand03d
jmp B000

Bi04:
mov [brand], 04h
Text 65,270,0x00000000,brand04, brand04len-brand04
jmp B000

Bi06:
mov [brand], 06h
Text 65,270,0x00000000,brand06, brand06len-brand06
jmp B000

Bi07:
mov [brand], 07h
Text 65,270,0x00000000,brand07, brand07len-brand07
jmp B000

Bi08:
mov [brand], 08h
Text 65,270,0x00000000,brand08, brand08len-brand08
jmp B000

Bi09:
mov [brand], 09h
Text 65,270,0x00000000,brand09, brand09len-brand09
jmp B000

Bi0A:
mov [brand], 0Ah
Text 65,270,0x00000000,brand0A, brand0Alen-brand0A
jmp B000

Bi0B:
mov [brand], 0Bh

cmp [m], 13
jl Eb
Text 65,270,0x00000000,brand0B, brand0Blen-brand0B
jmp B000
Eb:
Text 65,270,0x00000000,brand0Bd, brand0Bdlen-brand0Bd
jmp B000

Bi0C:
mov [brand], 0Ch
Text 65,270,0x00000000,brand0C, brand0Clen-brand0C
jmp B000

Bi0E:
mov [brand], 0Eh

cmp [m], 13
jl Ed
Text 65,270,0x00000000,brand0E, brand0Elen-brand0E
jmp B000
Ed:
Text 65,270,0x00000000,brand0Ed, brand0Edlen-brand0Ed
jmp B000

Bi0F:
mov [brand], 0Fh
Text 65,270,0x00000000,brand0F, brand0Flen-brand0F
jmp B000

Bi11:
mov [brand], 11h
Text 65,270,0x00000000,brand11, brand11len-brand11
jmp B000

Bi12:
mov [brand], 12h
Text 65,270,0x00000000,brand12, brand12len-brand12
jmp B000

Bi13:
mov [brand], 13h
Text 65,270,0x00000000,brand13, brand13len-brand13
jmp B000

Bi14:
mov [brand], 14h
Text 65,270,0x00000000,brand14, brand14len-brand14
jmp B000

Bi15:
mov [brand], 15h
Text 65,270,0x00000000,brand15, brand15len-brand15
jmp B000

Bi16:
mov [brand], 16h
Text 65,270,0x00000000,brand16, brand16len-brand16
jmp B000

Bi17:
mov [brand], 17h
Text 65,270,0x00000000,brand17, brand17len-brand17
jmp B000

B000:

ret