Rev 7423 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
7423 | leency | 1 | ; AUTHORS: |
2 | ; S. Kuzmin, A. Ershov, Madis Kalme 2005 |
||
3 | ; Sergey Efremenkov, Leency 2018 |
||
4 | |||
5 | ; CHECK OUT README.TXT! |
||
6 | |||
7 | format binary as "" |
||
8 | |||
9 | use32 |
||
10 | org 0x0 |
||
11 | db 'MENUET01' ; 8 byte id |
||
12 | dd 0x01 ; header version |
||
13 | dd START ; start of code |
||
14 | dd I_END ; size of image |
||
15 | dd 0x9000 ; memory for app |
||
16 | dd 0x9000 ; esp |
||
17 | dd fileinfo2.path ; I_Param , I_Icon |
||
18 | dd 0x0 |
||
19 | |||
20 | include "mos_uzit.inc" |
||
21 | |||
22 | TAG1_X = 250 ; coordinates of ID3v1 block |
||
23 | TAG1_Y = 40 |
||
24 | |||
25 | BLOCKS_TO_READ equ 2 ; must be greater than 1 |
||
26 | BLOCK_SIZE equ 512 ;сколько байт в блоке |
||
27 | |||
28 | START: |
||
29 | |||
30 | xor eax, eax |
||
31 | mov [last_err], eax |
||
32 | mov [fileinfo2+4], eax ; start block = 0 |
||
33 | mov dword [fileinfo2+12], BLOCKS_TO_READ*BLOCK_SIZE |
||
34 | mcall 70, fileinfo2 |
||
35 | |||
36 | result: |
||
37 | push eax ebx ;получаем размер файла в байтах |
||
38 | mcall 70, fileSizeInfo |
||
39 | |||
40 | cmp eax, 0 |
||
41 | je @f |
||
42 | mov dword[size], 16384; ebx |
||
43 | jmp result.sizeEnd |
||
44 | @@: |
||
45 | mov eax, dword[fileBuf+32] ; на самом деле там размер 8 байт, а не 4 |
||
46 | mov dword[size], eax |
||
47 | .sizeEnd: |
||
48 | pop ebx eax |
||
49 | ;mov dword [size], 16384; ebx |
||
50 | |||
51 | ; checking ID3v2 tag |
||
52 | xor eax, eax |
||
53 | mov [tagv2], eax |
||
54 | mov eax, [mp3_file] |
||
55 | and eax, 0x00ffffff |
||
56 | cmp eax, 'ID3' |
||
57 | jnz .no_id3v2 |
||
58 | mov eax, [mp3_file+3] |
||
59 | mov [tagv2], eax |
||
60 | |||
61 | mov ecx, 4 |
||
62 | mov esi, mp3_file+6 |
||
63 | xor eax, eax |
||
64 | xor ebx, ebx |
||
65 | cld |
||
66 | .size_read: |
||
67 | lodsb |
||
68 | shl ebx, 7 |
||
69 | or ebx, eax |
||
70 | loop .size_read |
||
71 | add ebx, 10 |
||
72 | mov eax, ebx |
||
73 | shr eax, 9 |
||
74 | |||
75 | push eax edx |
||
76 | mov edx, BLOCK_SIZE |
||
77 | mul edx |
||
78 | mov dword[fileinfo2+4], eax ; start block |
||
79 | pop edx eax |
||
80 | |||
81 | shl eax, 9 |
||
82 | |||
83 | mov ecx, ebx |
||
84 | add ecx, 3 |
||
85 | |||
86 | sub ebx, eax |
||
87 | mov edi, ebx |
||
88 | add edi, mp3_file |
||
89 | dec edi |
||
90 | |||
91 | mcall 70, fileinfo2 |
||
92 | |||
93 | jmp .loop |
||
94 | .no_id3v2: |
||
95 | |||
96 | mov ecx, 3 |
||
97 | mov edi, mp3_file-1 |
||
98 | .loop: |
||
99 | inc edi |
||
100 | inc ecx |
||
101 | cmp ecx, dword[size] |
||
102 | ja .no_frames |
||
103 | mov eax, [edi] |
||
104 | call Header_Check |
||
105 | test eax, eax |
||
106 | jz .header_found |
||
107 | cmp edi, mp3_file+BLOCKS_TO_READ*512-4 |
||
108 | jb .loop |
||
109 | |||
110 | add dword [fileinfo2+4], (BLOCKS_TO_READ-1)*BLOCK_SIZE |
||
111 | |||
112 | mcall 70, fileinfo2 |
||
113 | |||
114 | sub edi, (BLOCKS_TO_READ-1)*512 |
||
115 | jmp .loop |
||
116 | |||
117 | .no_frames: |
||
118 | mov [last_err], err_bad_file |
||
119 | mov [last_err_l], err_bad_file_e - err_bad_file |
||
120 | jmp reading_end |
||
121 | |||
122 | .header_found: |
||
123 | mov eax, dword [edi] |
||
124 | sub ecx, 4 |
||
125 | mov [header_at], ecx |
||
126 | |||
127 | |||
128 | call extract_bits |
||
129 | |||
130 | call decode_standard |
||
131 | |||
132 | call decode_layer |
||
133 | |||
134 | call decode_channels |
||
135 | |||
136 | call decode_samplerate |
||
137 | |||
138 | call decode_bitrate |
||
139 | |||
140 | call calculate_time_frame_count |
||
141 | |||
142 | ;-------------------------------------------- |
||
143 | |||
144 | mov eax, [b1s] |
||
145 | and eax, 1 |
||
146 | shl eax, 1 ; eax = eax * 2 |
||
147 | cmp byte [shan], 11b ; if mono |
||
148 | jz @f |
||
149 | inc eax |
||
150 | @@: |
||
151 | mov ebx, xing_offset |
||
152 | xlatb |
||
153 | |||
154 | add edi, eax |
||
155 | mov eax, [edi] |
||
156 | |||
157 | xor ebx, ebx |
||
158 | mov [xing_tag], ebx |
||
159 | cmp eax, 'Xing' |
||
160 | jnz .no_xing_tag |
||
161 | mov esi, edi |
||
162 | add esi, 15 |
||
163 | std |
||
164 | mov edi, xing_bytes |
||
165 | mov ecx, 3*4 |
||
166 | xor eax, eax |
||
167 | |||
168 | .xing_read: |
||
169 | lodsb |
||
170 | mov [edi], al |
||
171 | inc edi |
||
172 | loop .xing_read |
||
173 | cld |
||
174 | mov ebx, [xing_tag] |
||
175 | test ebx, 1 |
||
176 | jz .frames_end |
||
177 | mov eax, [xing_frames] |
||
178 | mov [framecount], eax |
||
179 | test [b1s], 1 ; if MPEG 1 eax = eax*2 |
||
180 | jz @f |
||
181 | shl eax, 1 |
||
182 | @@: |
||
183 | mov ebx, 575 |
||
184 | mul ebx ; edx:eax = eax*575 |
||
185 | mov ebx, [SR] |
||
186 | div ebx ; eax = edx:eax / sample rate |
||
187 | |||
188 | mov [time], eax |
||
189 | |||
190 | ; calculating bitrate |
||
191 | xor edx, edx |
||
192 | mov ebx, 1000 / 8 |
||
193 | mul ebx ; edx:eax = time * 1000 |
||
194 | mov ebx, eax |
||
195 | mov eax, [xing_bytes] |
||
196 | div ebx ; eax = size / time*1000 |
||
197 | mov [BR], eax |
||
198 | |||
199 | |||
200 | .frames_end: |
||
201 | |||
202 | |||
203 | .no_xing_tag: |
||
204 | |||
205 | xor eax, eax |
||
206 | xor ebx, ebx |
||
207 | xor ecx, ecx |
||
208 | xor edx, edx |
||
209 | ; ID3v1 tag reading |
||
210 | mov eax, [size] ; reading 2 last 512-byte blocks where our |
||
211 | mov ebx, eax ; tag may be |
||
212 | shr eax, 9 ; eax = size of file in full 512-byte blocks |
||
213 | test eax, eax ; if file's length is less then 512 we'll |
||
214 | jz @f ; read the whole file |
||
215 | dec eax |
||
216 | @@: |
||
217 | push eax edx |
||
218 | mov edx, BLOCK_SIZE |
||
219 | mul edx |
||
220 | mov dword [fileinfo2+4], eax ; start block |
||
221 | pop edx eax |
||
222 | mov dword [fileinfo2+12], 2*BLOCK_SIZE ; blocks to read |
||
223 | |||
224 | shl eax, 9 |
||
225 | sub ebx, eax |
||
226 | add ebx, mp3_file - 128 ; if tag is present, ebx points to it |
||
227 | mov esi, ebx |
||
228 | |||
229 | xor eax, eax |
||
230 | mov [tag], eax |
||
231 | |||
232 | |||
233 | mcall 70, fileinfo2 |
||
234 | |||
235 | mov eax, [esi] ; checking if tag is present |
||
236 | and eax, 0x00ffffff |
||
237 | cmp eax, 'TAG' |
||
238 | jnz @f |
||
239 | inc [tag] |
||
240 | cld |
||
241 | mov ecx, 128 / 4 |
||
242 | mov edi, tag.data |
||
243 | rep movsd |
||
244 | mov esi, tag.data |
||
245 | mov ecx, 126 |
||
246 | call Win2Dos |
||
247 | @@: |
||
248 | reading_end: |
||
249 | call draw_window ; 14.08.05 [ |
||
250 | |||
251 | |||
252 | ; Цикл получения и обработки сообщений |
||
253 | get_event: |
||
254 | mov eax,10 |
||
255 | int 0x40 |
||
256 | dec eax |
||
257 | jnz @f |
||
258 | call draw_window |
||
259 | jmp get_event |
||
260 | @@: |
||
261 | dec eax |
||
262 | jz key_on_keyboard |
||
263 | dec eax |
||
264 | jz click_on_button |
||
265 | jmp get_event |
||
266 | |||
267 | key_on_keyboard: |
||
268 | mcall 2 |
||
269 | jmp get_event |
||
270 | |||
271 | click_on_button: |
||
272 | exit: |
||
273 | mcall 17 |
||
274 | ;cmp ah, 10 |
||
275 | ;jz other_file |
||
276 | |||
277 | mov eax,-1 |
||
278 | int 0x40 |
||
279 | |||
280 | jmp get_event ; ] 14.08.05 |
||
281 | |||
282 | ; Рисование окна |
||
283 | draw_window: |
||
284 | mcall 12,1 |
||
285 | mov eax,0 ; function 0 : define and draw window |
||
286 | mov ebx,250 shl 16 + 500 |
||
287 | mov ecx,250 shl 16 + 300 |
||
288 | mov edx,0x34aabbcc ; color of work area RRGGBB,8->color gl |
||
289 | mov edi, header |
||
290 | int 0x40 |
||
291 | |||
292 | Text 20,12,0x00000000,choice, choicelen-choice |
||
293 | Text 110,12,0x00000000,fileinfo2.path, 60 |
||
294 | |||
295 | mov edx, dword [last_err] |
||
296 | test edx, edx |
||
297 | jz .no_err |
||
298 | mov eax, 4 |
||
299 | mov ebx, 50*65536+50 |
||
300 | xor ecx, ecx |
||
301 | mov esi, [last_err_l] |
||
302 | int 0x40 |
||
303 | jmp draw_end |
||
304 | .no_err: |
||
305 | |||
306 | Text 20,40,0x00000000,S, Slen-S |
||
307 | Number 110,40,1*256,1,dword [S1],0x000000; |
||
308 | Number 122,40,1*256,1,dword [S2],0x000000; |
||
309 | |||
310 | Text 20,60,0x00000000,L, Llen-L |
||
311 | Number 110,60,1*256,1,dword [La],0x000000 |
||
312 | |||
313 | Text 20,100,0x00000000,SamR, SamRlen-SamR |
||
314 | Number 110,100,0*256,5,dword [SR],0x000000 |
||
315 | |||
316 | Text 20,120,0x00000000,BitR, BitRlen-BitR |
||
317 | Number 110,120,0*256,3,dword [BR],0x000000 |
||
318 | |||
319 | mov eax, [xing_tag] |
||
320 | test eax, eax |
||
321 | jz @f |
||
322 | Text 170,120,0x00000000,vbr, vbr_e - vbr |
||
323 | @@: |
||
324 | |||
325 | Text 20,140,0x00000000,Sizebyte, Sizebytelen-Sizebyte |
||
326 | Number 110,140,0*256,8,dword [size],0x000000 |
||
327 | |||
328 | Text 20,160,0x00000000,Timese, Timeselen-Timese |
||
329 | Number 110,160,0*256,4,dword [time],0x000000 |
||
330 | |||
331 | Text 20,180,0x00000000,frame, framelen-frame |
||
332 | Number 110,180,0*256,4,dword [frames],0x000000 |
||
333 | |||
334 | Text 20,200,0x00000000,framcount, framcountlen-framcount |
||
335 | |||
336 | Text 20,220,0x00000000,padding, paddinglen-padding |
||
337 | |||
338 | cmp [pad], 1 |
||
339 | je res1 |
||
340 | jne res2 |
||
341 | |||
342 | res1: |
||
343 | Text 75,220,0x00000000,da, dalen-da |
||
344 | jmp nex |
||
345 | res2: |
||
346 | Text 75,220,0x00000000,net, netlen-net |
||
347 | jmp nex |
||
348 | |||
349 | nex: |
||
350 | |||
351 | ; ------------------ |
||
352 | |||
353 | |||
354 | Text 110,220,0x00000000,crci, crcilen-crci |
||
355 | |||
356 | cmp [crc], 0 |
||
357 | je res3 |
||
358 | jne res4 |
||
359 | |||
360 | res3: |
||
361 | Text 160,220,0x00000000,da, dalen-da |
||
362 | jmp ne |
||
363 | res4: |
||
364 | Text 160,220,0x00000000,net, netlen-net |
||
365 | jmp ne |
||
366 | |||
367 | ne: |
||
368 | |||
369 | ;-------------------------- |
||
370 | |||
371 | Number 110,200,0*256,6,dword [framecount],0x000000 |
||
372 | |||
373 | |||
374 | Text 20,80,0x00000000,Ka, Kalen-Ka |
||
375 | |||
376 | cmp [K], 1 |
||
377 | je rez1 |
||
378 | cmp [K], 2 |
||
379 | je rez2 |
||
380 | cmp [K], 3 |
||
381 | je rez3 |
||
382 | cmp [K], 4 |
||
383 | je rez4 |
||
384 | |||
385 | rez1: |
||
386 | Text 110,80,0x00000000,SC, SClen-SC |
||
387 | jmp next |
||
388 | rez2: |
||
389 | Text 110,80,0x00000000,DC, DClen-DC |
||
390 | jmp next |
||
391 | rez3: |
||
392 | Text 110,80,0x00000000,JOS, JOSlen-JOS |
||
393 | jmp next |
||
394 | rez4: |
||
395 | Text 110,80,0x00000000,Su, Sulen-Su |
||
396 | |||
397 | next: |
||
398 | Text 20,240,0,header_found, header_found_e - header_found |
||
399 | Number 160,240,0*256,6,dword [header_at],0x000000 ;;;;;;; HEADER AT |
||
400 | |||
401 | |||
402 | |||
403 | ; ID3v2 |
||
404 | |||
405 | mcall 4, 250*65536+220, 0,id3v2, id3v2_e - id3v2 |
||
406 | mov edi, tagv2 |
||
407 | mov eax, [edi] |
||
408 | test eax, eax |
||
409 | jz .no_v2 |
||
410 | mcall 4, 281*65536+220, ,dots, dots_e - dots |
||
411 | xor ecx, ecx |
||
412 | mov cl, byte [edi] |
||
413 | mcall 47, 65536*2, , 286*65536+220, 0 |
||
414 | mov cl, byte [edi+1] |
||
415 | mcall , , , 304*65536+220, |
||
416 | |||
417 | jmp .v2_end |
||
418 | .no_v2: |
||
419 | Text 300,220,0,net, netlen- net |
||
420 | .v2_end: |
||
421 | |||
422 | |||
423 | |||
424 | ; ID3v1 info |
||
425 | ; Writing all field names |
||
426 | mov eax, 4 ; function 4 |
||
427 | words2reg ebx, TAG1_X, TAG1_Y |
||
428 | xor ecx, ecx ; color |
||
429 | mov edx, id3v1 |
||
430 | mov esi, id3v1_e - id3v1 |
||
431 | int 0x40 |
||
432 | |||
433 | add ebx, 40 |
||
434 | mov edx, title ; length is the same, so we don't write it in esi |
||
435 | int 0x40 |
||
436 | |||
437 | add ebx, 20 |
||
438 | mov edx, artist |
||
439 | inc esi |
||
440 | int 0x40 |
||
441 | |||
442 | add ebx, 20 |
||
443 | mov edx, album |
||
444 | dec esi |
||
445 | int 0x40 |
||
446 | |||
447 | add ebx, 20 |
||
448 | mov edx, year |
||
449 | dec esi |
||
450 | int 0x40 |
||
451 | |||
452 | add ebx, 20 |
||
453 | mov edx, genre |
||
454 | inc esi |
||
455 | int 0x40 |
||
456 | |||
457 | add ebx, 20 |
||
458 | mov edx, comment |
||
459 | inc esi |
||
460 | inc esi |
||
461 | int 0x40 |
||
462 | |||
463 | sub ebx, 120 |
||
464 | mov edx, track |
||
465 | int 0x40 |
||
466 | |||
467 | ; checking if tag is |
||
468 | mov eax, dword [tag] |
||
469 | test eax, eax |
||
470 | jz .no_tag1 |
||
471 | |||
472 | mov edi, tag.data |
||
473 | |||
474 | ; writing walues |
||
475 | words2reg edx, (TAG1_X+50), (TAG1_Y+20) |
||
476 | |||
477 | ; track number uses the 30-th byte of comment field |
||
478 | ; it may be the last char in comment field |
||
479 | ; so we check if this byte presents a track number |
||
480 | mov eax, [edi+125] |
||
481 | test al, al |
||
482 | jnz .no_track |
||
483 | test ah, ah |
||
484 | jz .no_track |
||
485 | |||
486 | mov ebx, 3*65536 |
||
487 | xor ecx, ecx |
||
488 | mov cl, ah |
||
489 | xor esi, esi |
||
490 | mov eax, 47 |
||
491 | int 0x40 |
||
492 | |||
493 | .no_track: |
||
494 | mov ebx, edx |
||
495 | mov edx, edi |
||
496 | mov eax, 4 ; function 4 |
||
497 | xor ecx, ecx ; color |
||
498 | |||
499 | add ebx, 20 |
||
500 | add edx, 3 |
||
501 | mov esi, 30 |
||
502 | int 0x40 ; title |
||
503 | |||
504 | add ebx, 20 |
||
505 | add edx, esi |
||
506 | int 0x40 ; artist |
||
507 | |||
508 | add ebx, 20 |
||
509 | add edx, esi |
||
510 | int 0x40 ; album |
||
511 | |||
512 | add ebx, 60 |
||
513 | add edx, 34 |
||
514 | dec esi |
||
515 | int 0x40 ; comment |
||
516 | |||
517 | sub ebx, 40 |
||
518 | mov esi, 4 |
||
519 | sub edx, esi |
||
520 | int 0x40 ; year |
||
521 | |||
522 | .no_tag1: |
||
523 | draw_end: |
||
524 | mcall 12, 2 |
||
525 | ret ; (!) 14.08.05 |
||
526 | |||
527 | freq dd 11025, 12000, 8000 |
||
528 | Bitrate db 0,1,2, 3, 4, 5, 6, 7, 8,10,12,14,16,18,20,0,\ ; v2 l2 l3 |
||
529 | 0,1,2, 3, 4, 5, 6, 7, 8,10,12,14,16,18,20,0,\ ; v2 l2 l3 |
||
530 | 0,4,6, 7, 8,10,12,14,16,18,20,22,24,28,32,0,\ ; v2 l1 |
||
531 | 0,4,5, 6, 7, 8,10,12,14,16,20,24,28,32,40,0,\ ; v1 l3 |
||
532 | 0,4,6, 7, 8,10,12,14,16,20,24,28,32,40,48,0,\ ; v1 l2 |
||
533 | 0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,0 ; v1 l1 |
||
534 | xing_offset db 13, 21, 21, 36 |
||
535 | header: |
||
536 | db 'MP3 Info 0.7',0 |
||
537 | |||
538 | S: |
||
539 | db 'MPEG Version: . ' |
||
540 | Slen: |
||
541 | |||
542 | L: |
||
543 | db 'Layer: ' |
||
544 | Llen: |
||
545 | |||
546 | Ka: |
||
547 | db 'Channels Mode: ' |
||
548 | Kalen: |
||
549 | |||
550 | Su: |
||
551 | db 'Stereo' |
||
552 | Sulen: |
||
553 | |||
554 | JOS: |
||
555 | db 'Joint stereo ' |
||
556 | JOSlen: |
||
557 | |||
558 | DC: |
||
559 | db 'Dual channel' |
||
560 | DClen: |
||
561 | |||
562 | SC: |
||
563 | db 'Single Channel (Mono)' |
||
564 | SClen: |
||
565 | |||
566 | SamR: |
||
567 | db 'Sample Rate: Hz' |
||
568 | SamRlen: |
||
569 | |||
570 | BitR: |
||
571 | db 'BitRate: Kbps' |
||
572 | BitRlen: |
||
573 | |||
574 | Sizebyte: |
||
575 | db 'Size: bytes' |
||
576 | Sizebytelen: |
||
577 | |||
578 | Timese: |
||
579 | db 'Time: seconds' |
||
580 | Timeselen: |
||
581 | |||
582 | frame: |
||
583 | db 'Frame size: bytes' |
||
584 | framelen: |
||
585 | |||
586 | framcount: |
||
587 | db 'Quantity: frames' |
||
588 | framcountlen: |
||
589 | |||
590 | padding: |
||
591 | db 'Padding:' |
||
592 | paddinglen: |
||
593 | |||
594 | crci: |
||
595 | db 'CRC:' |
||
596 | crcilen: |
||
597 | |||
598 | da: |
||
599 | db 'yes' |
||
600 | dalen: |
||
601 | |||
602 | net: |
||
603 | db 'no' |
||
604 | netlen: |
||
605 | dots db '. .' |
||
606 | dots_e: |
||
607 | |||
608 | header_found db 'Header found at:' |
||
609 | header_found_e: |
||
610 | |||
611 | choice: |
||
612 | db 'File path: ' |
||
613 | choicelen: |
||
614 | id3v2 db 'ID3v2' |
||
615 | id3v2_e: |
||
616 | vbr db '(VBR)' |
||
617 | vbr_e: |
||
618 | id3v1 db 'ID3v1' |
||
619 | id3v1_e: |
||
620 | track db 'Track #' |
||
621 | track_e: |
||
622 | title db 'Title' |
||
623 | title_e: |
||
624 | artist db 'Artist' |
||
625 | artist_e: |
||
626 | album db 'Album' |
||
627 | album_e: |
||
628 | year db 'Year' |
||
629 | year_e: |
||
630 | genre db 'Genre' |
||
631 | genre_e: |
||
632 | comment db 'Comment' |
||
633 | comment_e: |
||
634 | |||
635 | err_bad_file db 'Bad file' |
||
636 | err_bad_file_e: |
||
637 | |||
638 | fileinfo2: |
||
639 | .func dd 0 ;номер подфункции |
||
640 | .start dd 0*BLOCK_SIZE ;позиция в файле (в байтах) *512 |
||
641 | dd 0 ;(зарезервировано под старший dword позиции) |
||
642 | .size dd 1*BLOCK_SIZE ;сколько байт читать |
||
643 | .buf dd mp3_file ;указатель на буфер, куда будут записаны данные |
||
644 | .path: |
||
9587 | vitalkrilo | 645 | db "TEST.MP3",0 ;"/SYS/TEST.MP3",0 |
7423 | leency | 646 | rb 256-($-.path) |
647 | |||
648 | |||
649 | ;для получения корректного размера файла |
||
650 | fileSizeInfo: |
||
651 | dd 5 ; номер подфункции |
||
652 | dd 0,0,0 ;(зарезервировано) |
||
653 | dd fileBuf ;указатель на буфер, куда будут записаны данные(40 байт) |
||
654 | db 0 |
||
655 | dd fileinfo2.path |
||
656 | |||
657 | fileBuf: db 40 dup(0) |
||
658 | |||
659 | |||
660 | ;================================================= |
||
661 | b1s dd ? ; standard |
||
662 | b1l dd ? ; layer |
||
663 | S1 dd ? |
||
664 | S2 dd ? |
||
665 | La dd ? |
||
666 | shan dd ? |
||
667 | K dd ? |
||
668 | sam dd ? |
||
669 | id dd ? |
||
670 | SR dd ? |
||
671 | Bita dd ? |
||
672 | BR dd ? |
||
673 | size dd ? |
||
674 | time dd ? |
||
675 | frames dd ? |
||
676 | |||
677 | xing_bytes dd ? |
||
678 | xing_frames dd ? |
||
679 | xing_tag dd ? |
||
680 | |||
681 | tagv2 dd ? |
||
682 | tag dd ? |
||
683 | .data rb 128 |
||
684 | framecount dd ? |
||
685 | pad dd ? |
||
686 | priv dd ? |
||
687 | modx dd ? |
||
688 | copy dd ? |
||
689 | orig dd ? |
||
690 | emph dd ? |
||
691 | crc dd ? |
||
692 | header_at dd ? |
||
693 | last_err dd ? |
||
694 | last_err_l dd ? |
||
695 | |||
696 | |||
697 | I_END: |
||
698 | |||
699 | ;label pre_file dword at 0x3000-4 |
||
700 | label mp3_file dword at 0x3000 |
||
701 |