Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 7422 → Rev 7423

/programs/media/mp3info/mos_uzit.inc
0,0 → 1,494
;--------------------;
; MACROS.INC ;
;--------------------;
 
macro __mov reg,a { ; mike.dld
if ~a eq
mov reg,a
end if
}
 
macro mcall a,b,c,d,e,f { ; mike.dld
__mov eax,a
__mov ebx,b
__mov ecx,c
__mov edx,d
__mov esi,e
__mov edi,f
int 0x40
}
 
;--------------------;
; ASCL.INC ;
;--------------------;
 
macro words2reg reg,hiword,lowword
{
if hiword eq
if lowword eq
; not changes
else
if lowword eqtype 12
and reg,dword 0xffff0000
add reg,dword lowword
else
and reg,dword 0xffff0000
add reg,dword lowword
end if
end if
else
if lowword eq
if hiword eqtype 12
and reg,dword 0x0000ffff
add reg,dword hiword*65536
else
shl reg,16
add reg,dword hiword
ror reg,16
end if
else
if lowword eqtype 12 & hiword eqtype 12
if lowword eq 0 & hiword eq 0
xor reg,reg
else
mov reg,dword hiword*65536+lowword
end if
else
mov reg,dword hiword
shl reg,16
add reg,dword lowword
end if
end if
end if
}
 
;--------------------;
; MOSUZIT.INC ;
;--------------------;
 
;WriteTextToWindow
macro Text xStart,yStart,rgbColor,pText,nTextLen
{
words2reg ebx, xStart, yStart
mov ecx, rgbColor
mov edx, pText
mov esi, nTextLen
mov eax, 4
int 0x40
}
 
;DisplayNumber
macro Number xStart,yStart,nPrintType,noOfDigits,Data,rgbColor
{
words2reg edx,xStart,yStart
words2reg ebx,noOfDigits,nPrintType
mov ecx,Data
mov esi,rgbColor
mov eax,47
int 0x40
}
 
macro DrawLine xStart,xEnd,yStart,yEnd,rgbColor
{
words2reg ebx,xStart,xEnd
words2reg ecx,yStart,yEnd
mov edx,rgbColor
mov eax,38
int 0x40
}
;********************************************************
macro Extracteax temp,fromBit,bitCount,dest
{
mov temp, eax
shr temp, fromBit
and temp, (1 shl bitCount - 1)
mov dest, temp
}
;********************************************************
;********* AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM *********
;********************************************************
extract_bits: ;11xA is sync
;Defined as the following:
; b1s ; standard
; b1l ; layer
; crc ; CRC protection
 
; Bita ; Bitrate
; sam ; Sampling rate
; pad ; Padding
; priv ; Private bit
 
; shan ; Channel mode
; modx ; Mode extention
; copy ; Copyright
; orig ; Original
; emph ; Emphasis
 
;--------------------- Standard (BB)
Extracteax ebx, 11, 2, [b1s]
;--------------------- Layer (CC)
Extracteax ebx, 9, 2, [b1l]
;--------------------- CRC (D)
Extracteax ebx, 8, 1, [crc]
;--------------------- Bitrate (EEEE)
Extracteax ebx, 20, 4, [Bita]
;--------------------- Sample Rate (FF)
Extracteax ebx, 18, 2, [sam]
;--------------------- padding (G)
Extracteax ebx, 17, 1, [pad]
;--------------------- Private bit (H)
Extracteax ebx, 16, 1, [priv]
;--------------------- Channels (II)
Extracteax ebx, 30, 2, [shan]
;--------------------- Mode ext (JJ)
Extracteax ebx, 28, 2, [modx]
;--------------------- Copyright (K)
Extracteax ebx, 27, 1, [copy]
;--------------------- Original (L)
Extracteax ebx, 26, 1, [orig]
;--------------------- Emphasis (MM)
Extracteax ebx, 24, 2, [emph]
 
ret
;********************************************************
decode_standard:
 
comp0:
cmp [b1s], 00b
je S25
 
comp1:
cmp [b1s], 01b ; unknown
je S25
 
comp2:
cmp [b1s], 10b
je S20
 
comp3:
cmp [b1s], 11b
je S10
 
jmp S000
 
;-----
 
S25:
mov [S1], 2
mov [S2], 5
mov [id], 3 ;lowest freq
jmp S000
 
S20:
mov [S1], 2
mov [S2], 0
mov [id], 2 ;low freq
jmp S000
 
S10:
mov [S1], 1
mov [S2], 0
mov [id], 1 ;hi freq
jmp S000
 
S000:
 
ret
 
;********************************************************
 
decode_layer:
 
com0:
cmp [b1l], 00b
je L3 ; unknown
 
com1:
cmp [b1l], 01b
je L3
 
com2:
cmp [b1l], 10b
je L2
 
com3:
cmp [b1l], 11b
je L1
 
jmp L000
 
;-----
 
L3:
mov [La], 3
jmp L000
 
L2:
mov [La], 2
jmp L000
 
L1:
mov [La], 1
jmp L000
 
L000:
 
ret
 
;********************************************************
 
decode_channels:
 
co0:
cmp [shan], 00b
je C4
 
co1:
cmp [shan], 01b
je C3
 
co2:
cmp [shan], 10b
je C2
 
co3:
cmp [shan], 11b
je C1
 
jmp C000
 
;-----
C4:
mov [K], 4 ;00=Stereo
jmp C000
 
C3:
mov [K], 3 ;01=Joint stereo
jmp C000
 
C2:
mov [K], 2 ;10=Dual Channel
jmp C000
 
C1:
mov [K], 1 ;11=Single Channel (Mono)
jmp C000
 
C000:
 
ret
;********************************************************
;--------------------------
; decode_samplerate
;--------------------------
decode_samplerate:
push eax
push ecx
 
mov eax, [sam]
mov eax, [freq + eax*4]
mov ecx, [b1s]
cmp cl, 01 ; bad frequency
jnz ok
 
ok:
cmp cl, 0
jz @f
dec cl
@@:
shl eax, cl
mov [SR], eax
 
pop ecx
pop eax
ret
 
;********************************************************
;--------------------------
; decode_bitrate
;--------------------------
decode_bitrate:
push eax
push ebx
mov eax,[b1s]
and eax,1
shl eax,4
lea eax,[eax*3]
mov ebx,[b1l]
dec ebx
shl ebx, 4
add eax, ebx
add eax,[Bita]
movzx eax,byte[Bitrate+eax]
shl eax,3
mov [BR],eax
pop ebx
pop eax
ret
 
;********************************************************
 
calculate_time_frame_count:
 
;----------------------------duration
xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx
 
mov ebx, dword[BR]
imul ebx, 125
; result in ebx
 
 
mov eax, dword[size]
 
div ebx
 
 
mov dword[time], eax
;---------------------------frame size
 
xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx
 
cmp [S1], 1
je MP1
cmp [S1], 2
je MP2
 
MP1:
 
mov eax, dword [BR]
imul eax, 144000
; result in eax
 
 
mov ebx, dword[SR]
 
div ebx
 
add eax, dword [pad]
 
mov dword[frames], eax
 
jmp exx
 
MP2:
 
mov eax, dword [BR]
imul eax, 72000
; result in eax
 
 
mov ebx, dword[SR]
 
div ebx
 
add eax, dword [pad]
 
mov dword[frames], eax
 
exx:
;--------------------------quantity of frames
xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx
 
mov eax, dword[size]
mov ebx, dword[frames]
div ebx
mov dword[framecount], eax
 
ret
 
;--------------------------
; header_check
; eax = ïðîâåðÿåìûé çàãîëîâîê
;--------------------------
Header_Check:
 
push ebx
mov ebx, eax
 
; Ïðîâåðÿåì 11 áèò â íà÷àëå ôðåéìà
and eax, 0E0FFh
cmp eax, 0E0FFh
jnz bad
 
; Ïðîâåðÿåì âåðñèþ MPEG
mov eax, ebx
and eax, 1800h
cmp eax, 0800h
jz bad
 
; Ïðîâåðÿåì layer
mov eax, ebx
test eax, 0600h
jz bad
 
; Ïðîâåðÿåì áèòðåéò
mov eax, ebx
and eax, 0F00000h
cmp eax, 0F00000h
jz bad
test eax, eax
jz bad
 
; Ïðîâåðÿåì ÷àñòîòó
mov eax, ebx
and eax, 0C0000h
cmp eax, 0C0000h
jz bad
.end_test:
xor eax, eax
pop ebx
ret
 
bad:
mov eax, 1
pop ebx
ret
 
 
;===========================
Win2Dos:
;===========================
jcxz .no_chars
push esi
push edi
push ecx
mov edi, esi
cld
.next_char:
lodsb
cmp al, 0xC0
jae .rus
cmp al, 0xA8
jnz @f
mov al, 0xF0
@@:
cmp al, 0xB8
jnz @f
mov al, 0xF1
@@:
jmp .char_ready
.rus:
cmp al, 0xF0
jae @f
sub al, 48
@@:
sub al, 16
.char_ready:
stosb
dec ecx
jnz .next_char
 
pop ecx
pop edi
pop esi
.no_chars:
ret