Root/Documentation/video4linux/extract_xc3028.pl

1#!/usr/bin/perl
2
3# Copyright (c) Mauro Carvalho Chehab <mchehab@infradead.org>
4# Released under GPLv2
5#
6# In order to use, you need to:
7# 1) Download the windows driver with something like:
8# Version 2.4
9# wget http://www.twinhan.com/files/AW/BDA T/20080303_V1.0.6.7.zip
10# or wget http://www.stefanringel.de/pub/20080303_V1.0.6.7.zip
11# Version 2.7
12# wget http://www.steventoth.net/linux/xc5000/HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip
13# 2) Extract the files from the zip into the current dir:
14# unzip -j 20080303_V1.0.6.7.zip 20080303_v1.0.6.7/UDXTTM6000.sys
15# unzip -j HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip Driver85/hcw85bda.sys
16# 3) run the script:
17# ./extract_xc3028.pl
18# 4) copy the generated files:
19# cp xc3028-v24.fw /lib/firmware
20# cp xc3028-v27.fw /lib/firmware
21
22#use strict;
23use IO::Handle;
24
25my $debug=0;
26
27sub verify ($$)
28{
29    my ($filename, $hash) = @_;
30    my ($testhash);
31
32    if (system("which md5sum > /dev/null 2>&1")) {
33        die "This firmware requires the md5sum command - see http://www.gnu.org/software/coreutils/\n";
34    }
35
36    open(CMD, "md5sum ".$filename."|");
37    $testhash = <CMD>;
38    $testhash =~ /([a-zA-Z0-9]*)/;
39    $testhash = $1;
40    close CMD;
41        die "Hash of extracted file does not match (found $testhash, expected $hash!\n" if ($testhash ne $hash);
42}
43
44sub get_hunk ($$)
45{
46    my ($offset, $length) = @_;
47    my ($chunklength, $buf, $rcount, $out);
48
49    sysseek(INFILE, $offset, SEEK_SET);
50    while ($length > 0) {
51    # Calc chunk size
52        $chunklength = 2048;
53        $chunklength = $length if ($chunklength > $length);
54
55        $rcount = sysread(INFILE, $buf, $chunklength);
56        die "Ran out of data\n" if ($rcount != $chunklength);
57        $out .= $buf;
58        $length -= $rcount;
59    }
60    return $out;
61}
62
63sub write_le16($)
64{
65    my $val = shift;
66    my $msb = ($val >> 8) &0xff;
67    my $lsb = $val & 0xff;
68
69    syswrite(OUTFILE, chr($lsb).chr($msb));
70}
71
72sub write_le32($)
73{
74    my $val = shift;
75    my $l3 = ($val >> 24) & 0xff;
76    my $l2 = ($val >> 16) & 0xff;
77    my $l1 = ($val >> 8) & 0xff;
78    my $l0 = $val & 0xff;
79
80    syswrite(OUTFILE, chr($l0).chr($l1).chr($l2).chr($l3));
81}
82
83sub write_le64($$)
84{
85    my $msb_val = shift;
86    my $lsb_val = shift;
87    my $l7 = ($msb_val >> 24) & 0xff;
88    my $l6 = ($msb_val >> 16) & 0xff;
89    my $l5 = ($msb_val >> 8) & 0xff;
90    my $l4 = $msb_val & 0xff;
91
92    my $l3 = ($lsb_val >> 24) & 0xff;
93    my $l2 = ($lsb_val >> 16) & 0xff;
94    my $l1 = ($lsb_val >> 8) & 0xff;
95    my $l0 = $lsb_val & 0xff;
96
97    syswrite(OUTFILE,
98         chr($l0).chr($l1).chr($l2).chr($l3).
99         chr($l4).chr($l5).chr($l6).chr($l7));
100}
101
102sub write_hunk($$)
103{
104    my ($offset, $length) = @_;
105    my $out = get_hunk($offset, $length);
106
107    printf "(len %d) ",$length if ($debug);
108
109    for (my $i=0;$i<$length;$i++) {
110        printf "%02x ",ord(substr($out,$i,1)) if ($debug);
111    }
112    printf "\n" if ($debug);
113
114    syswrite(OUTFILE, $out);
115}
116
117sub write_hunk_fix_endian($$)
118{
119    my ($offset, $length) = @_;
120    my $out = get_hunk($offset, $length);
121
122    printf "(len_fix %d) ",$length if ($debug);
123
124    for (my $i=0;$i<$length;$i++) {
125        printf "%02x ",ord(substr($out,$i,1)) if ($debug);
126    }
127    printf "\n" if ($debug);
128
129    my $i=0;
130    while ($i<$length) {
131        my $size = ord(substr($out,$i,1))*256+ord(substr($out,$i+1,1));
132        syswrite(OUTFILE, substr($out,$i+1,1));
133        syswrite(OUTFILE, substr($out,$i,1));
134        $i+=2;
135        if ($size>0 && $size <0x8000) {
136            for (my $j=0;$j<$size;$j++) {
137                syswrite(OUTFILE, substr($out,$j+$i,1));
138            }
139            $i+=$size;
140        }
141    }
142}
143
144sub main_firmware_24($$$$)
145{
146    my $out;
147    my $j=0;
148    my $outfile = shift;
149    my $name = shift;
150    my $version = shift;
151    my $nr_desc = shift;
152
153    for ($j = length($name); $j <32; $j++) {
154        $name = $name.chr(0);
155    }
156
157    open OUTFILE, ">$outfile";
158    syswrite(OUTFILE, $name);
159    write_le16($version);
160    write_le16($nr_desc);
161
162    #
163    # Firmware 0, type: BASE FW F8MHZ (0x00000003), id: (0000000000000000), size: 6635
164    #
165
166    write_le32(0x00000003); # Type
167    write_le64(0x00000000, 0x00000000); # ID
168    write_le32(6635); # Size
169    write_hunk_fix_endian(257752, 6635);
170
171    #
172    # Firmware 1, type: BASE FW F8MHZ MTS (0x00000007), id: (0000000000000000), size: 6635
173    #
174
175    write_le32(0x00000007); # Type
176    write_le64(0x00000000, 0x00000000); # ID
177    write_le32(6635); # Size
178    write_hunk_fix_endian(264392, 6635);
179
180    #
181    # Firmware 2, type: BASE FW FM (0x00000401), id: (0000000000000000), size: 6525
182    #
183
184    write_le32(0x00000401); # Type
185    write_le64(0x00000000, 0x00000000); # ID
186    write_le32(6525); # Size
187    write_hunk_fix_endian(271040, 6525);
188
189    #
190    # Firmware 3, type: BASE FW FM INPUT1 (0x00000c01), id: (0000000000000000), size: 6539
191    #
192
193    write_le32(0x00000c01); # Type
194    write_le64(0x00000000, 0x00000000); # ID
195    write_le32(6539); # Size
196    write_hunk_fix_endian(277568, 6539);
197
198    #
199    # Firmware 4, type: BASE FW (0x00000001), id: (0000000000000000), size: 6633
200    #
201
202    write_le32(0x00000001); # Type
203    write_le64(0x00000000, 0x00000000); # ID
204    write_le32(6633); # Size
205    write_hunk_fix_endian(284120, 6633);
206
207    #
208    # Firmware 5, type: BASE FW MTS (0x00000005), id: (0000000000000000), size: 6617
209    #
210
211    write_le32(0x00000005); # Type
212    write_le64(0x00000000, 0x00000000); # ID
213    write_le32(6617); # Size
214    write_hunk_fix_endian(290760, 6617);
215
216    #
217    # Firmware 6, type: STD FW (0x00000000), id: PAL/BG A2/A (0000000100000007), size: 161
218    #
219
220    write_le32(0x00000000); # Type
221    write_le64(0x00000001, 0x00000007); # ID
222    write_le32(161); # Size
223    write_hunk_fix_endian(297384, 161);
224
225    #
226    # Firmware 7, type: STD FW MTS (0x00000004), id: PAL/BG A2/A (0000000100000007), size: 169
227    #
228
229    write_le32(0x00000004); # Type
230    write_le64(0x00000001, 0x00000007); # ID
231    write_le32(169); # Size
232    write_hunk_fix_endian(297552, 169);
233
234    #
235    # Firmware 8, type: STD FW (0x00000000), id: PAL/BG A2/B (0000000200000007), size: 161
236    #
237
238    write_le32(0x00000000); # Type
239    write_le64(0x00000002, 0x00000007); # ID
240    write_le32(161); # Size
241    write_hunk_fix_endian(297728, 161);
242
243    #
244    # Firmware 9, type: STD FW MTS (0x00000004), id: PAL/BG A2/B (0000000200000007), size: 169
245    #
246
247    write_le32(0x00000004); # Type
248    write_le64(0x00000002, 0x00000007); # ID
249    write_le32(169); # Size
250    write_hunk_fix_endian(297896, 169);
251
252    #
253    # Firmware 10, type: STD FW (0x00000000), id: PAL/BG NICAM/A (0000000400000007), size: 161
254    #
255
256    write_le32(0x00000000); # Type
257    write_le64(0x00000004, 0x00000007); # ID
258    write_le32(161); # Size
259    write_hunk_fix_endian(298072, 161);
260
261    #
262    # Firmware 11, type: STD FW MTS (0x00000004), id: PAL/BG NICAM/A (0000000400000007), size: 169
263    #
264
265    write_le32(0x00000004); # Type
266    write_le64(0x00000004, 0x00000007); # ID
267    write_le32(169); # Size
268    write_hunk_fix_endian(298240, 169);
269
270    #
271    # Firmware 12, type: STD FW (0x00000000), id: PAL/BG NICAM/B (0000000800000007), size: 161
272    #
273
274    write_le32(0x00000000); # Type
275    write_le64(0x00000008, 0x00000007); # ID
276    write_le32(161); # Size
277    write_hunk_fix_endian(298416, 161);
278
279    #
280    # Firmware 13, type: STD FW MTS (0x00000004), id: PAL/BG NICAM/B (0000000800000007), size: 169
281    #
282
283    write_le32(0x00000004); # Type
284    write_le64(0x00000008, 0x00000007); # ID
285    write_le32(169); # Size
286    write_hunk_fix_endian(298584, 169);
287
288    #
289    # Firmware 14, type: STD FW (0x00000000), id: PAL/DK A2 (00000003000000e0), size: 161
290    #
291
292    write_le32(0x00000000); # Type
293    write_le64(0x00000003, 0x000000e0); # ID
294    write_le32(161); # Size
295    write_hunk_fix_endian(298760, 161);
296
297    #
298    # Firmware 15, type: STD FW MTS (0x00000004), id: PAL/DK A2 (00000003000000e0), size: 169
299    #
300
301    write_le32(0x00000004); # Type
302    write_le64(0x00000003, 0x000000e0); # ID
303    write_le32(169); # Size
304    write_hunk_fix_endian(298928, 169);
305
306    #
307    # Firmware 16, type: STD FW (0x00000000), id: PAL/DK NICAM (0000000c000000e0), size: 161
308    #
309
310    write_le32(0x00000000); # Type
311    write_le64(0x0000000c, 0x000000e0); # ID
312    write_le32(161); # Size
313    write_hunk_fix_endian(299104, 161);
314
315    #
316    # Firmware 17, type: STD FW MTS (0x00000004), id: PAL/DK NICAM (0000000c000000e0), size: 169
317    #
318
319    write_le32(0x00000004); # Type
320    write_le64(0x0000000c, 0x000000e0); # ID
321    write_le32(169); # Size
322    write_hunk_fix_endian(299272, 169);
323
324    #
325    # Firmware 18, type: STD FW (0x00000000), id: SECAM/K1 (0000000000200000), size: 161
326    #
327
328    write_le32(0x00000000); # Type
329    write_le64(0x00000000, 0x00200000); # ID
330    write_le32(161); # Size
331    write_hunk_fix_endian(299448, 161);
332
333    #
334    # Firmware 19, type: STD FW MTS (0x00000004), id: SECAM/K1 (0000000000200000), size: 169
335    #
336
337    write_le32(0x00000004); # Type
338    write_le64(0x00000000, 0x00200000); # ID
339    write_le32(169); # Size
340    write_hunk_fix_endian(299616, 169);
341
342    #
343    # Firmware 20, type: STD FW (0x00000000), id: SECAM/K3 (0000000004000000), size: 161
344    #
345
346    write_le32(0x00000000); # Type
347    write_le64(0x00000000, 0x04000000); # ID
348    write_le32(161); # Size
349    write_hunk_fix_endian(299792, 161);
350
351    #
352    # Firmware 21, type: STD FW MTS (0x00000004), id: SECAM/K3 (0000000004000000), size: 169
353    #
354
355    write_le32(0x00000004); # Type
356    write_le64(0x00000000, 0x04000000); # ID
357    write_le32(169); # Size
358    write_hunk_fix_endian(299960, 169);
359
360    #
361    # Firmware 22, type: STD FW D2633 DTV6 ATSC (0x00010030), id: (0000000000000000), size: 149
362    #
363
364    write_le32(0x00010030); # Type
365    write_le64(0x00000000, 0x00000000); # ID
366    write_le32(149); # Size
367    write_hunk_fix_endian(300136, 149);
368
369    #
370    # Firmware 23, type: STD FW D2620 DTV6 QAM (0x00000068), id: (0000000000000000), size: 149
371    #
372
373    write_le32(0x00000068); # Type
374    write_le64(0x00000000, 0x00000000); # ID
375    write_le32(149); # Size
376    write_hunk_fix_endian(300296, 149);
377
378    #
379    # Firmware 24, type: STD FW D2633 DTV6 QAM (0x00000070), id: (0000000000000000), size: 149
380    #
381
382    write_le32(0x00000070); # Type
383    write_le64(0x00000000, 0x00000000); # ID
384    write_le32(149); # Size
385    write_hunk_fix_endian(300448, 149);
386
387    #
388    # Firmware 25, type: STD FW D2620 DTV7 (0x00000088), id: (0000000000000000), size: 149
389    #
390
391    write_le32(0x00000088); # Type
392    write_le64(0x00000000, 0x00000000); # ID
393    write_le32(149); # Size
394    write_hunk_fix_endian(300608, 149);
395
396    #
397    # Firmware 26, type: STD FW D2633 DTV7 (0x00000090), id: (0000000000000000), size: 149
398    #
399
400    write_le32(0x00000090); # Type
401    write_le64(0x00000000, 0x00000000); # ID
402    write_le32(149); # Size
403    write_hunk_fix_endian(300760, 149);
404
405    #
406    # Firmware 27, type: STD FW D2620 DTV78 (0x00000108), id: (0000000000000000), size: 149
407    #
408
409    write_le32(0x00000108); # Type
410    write_le64(0x00000000, 0x00000000); # ID
411    write_le32(149); # Size
412    write_hunk_fix_endian(300920, 149);
413
414    #
415    # Firmware 28, type: STD FW D2633 DTV78 (0x00000110), id: (0000000000000000), size: 149
416    #
417
418    write_le32(0x00000110); # Type
419    write_le64(0x00000000, 0x00000000); # ID
420    write_le32(149); # Size
421    write_hunk_fix_endian(301072, 149);
422
423    #
424    # Firmware 29, type: STD FW D2620 DTV8 (0x00000208), id: (0000000000000000), size: 149
425    #
426
427    write_le32(0x00000208); # Type
428    write_le64(0x00000000, 0x00000000); # ID
429    write_le32(149); # Size
430    write_hunk_fix_endian(301232, 149);
431
432    #
433    # Firmware 30, type: STD FW D2633 DTV8 (0x00000210), id: (0000000000000000), size: 149
434    #
435
436    write_le32(0x00000210); # Type
437    write_le64(0x00000000, 0x00000000); # ID
438    write_le32(149); # Size
439    write_hunk_fix_endian(301384, 149);
440
441    #
442    # Firmware 31, type: STD FW FM (0x00000400), id: (0000000000000000), size: 135
443    #
444
445    write_le32(0x00000400); # Type
446    write_le64(0x00000000, 0x00000000); # ID
447    write_le32(135); # Size
448    write_hunk_fix_endian(301554, 135);
449
450    #
451    # Firmware 32, type: STD FW (0x00000000), id: PAL/I (0000000000000010), size: 161
452    #
453
454    write_le32(0x00000000); # Type
455    write_le64(0x00000000, 0x00000010); # ID
456    write_le32(161); # Size
457    write_hunk_fix_endian(301688, 161);
458
459    #
460    # Firmware 33, type: STD FW MTS (0x00000004), id: PAL/I (0000000000000010), size: 169
461    #
462
463    write_le32(0x00000004); # Type
464    write_le64(0x00000000, 0x00000010); # ID
465    write_le32(169); # Size
466    write_hunk_fix_endian(301856, 169);
467
468    #
469    # Firmware 34, type: STD FW (0x00000000), id: SECAM/L AM (0000001000400000), size: 169
470    #
471
472    #
473    # Firmware 35, type: STD FW (0x00000000), id: SECAM/L NICAM (0000000c00400000), size: 161
474    #
475
476    write_le32(0x00000000); # Type
477    write_le64(0x0000000c, 0x00400000); # ID
478    write_le32(161); # Size
479    write_hunk_fix_endian(302032, 161);
480
481    #
482    # Firmware 36, type: STD FW (0x00000000), id: SECAM/Lc (0000000000800000), size: 161
483    #
484
485    write_le32(0x00000000); # Type
486    write_le64(0x00000000, 0x00800000); # ID
487    write_le32(161); # Size
488    write_hunk_fix_endian(302200, 161);
489
490    #
491    # Firmware 37, type: STD FW (0x00000000), id: NTSC/M Kr (0000000000008000), size: 161
492    #
493
494    write_le32(0x00000000); # Type
495    write_le64(0x00000000, 0x00008000); # ID
496    write_le32(161); # Size
497    write_hunk_fix_endian(302368, 161);
498
499    #
500    # Firmware 38, type: STD FW LCD (0x00001000), id: NTSC/M Kr (0000000000008000), size: 161
501    #
502
503    write_le32(0x00001000); # Type
504    write_le64(0x00000000, 0x00008000); # ID
505    write_le32(161); # Size
506    write_hunk_fix_endian(302536, 161);
507
508    #
509    # Firmware 39, type: STD FW LCD NOGD (0x00003000), id: NTSC/M Kr (0000000000008000), size: 161
510    #
511
512    write_le32(0x00003000); # Type
513    write_le64(0x00000000, 0x00008000); # ID
514    write_le32(161); # Size
515    write_hunk_fix_endian(302704, 161);
516
517    #
518    # Firmware 40, type: STD FW MTS (0x00000004), id: NTSC/M Kr (0000000000008000), size: 169
519    #
520
521    write_le32(0x00000004); # Type
522    write_le64(0x00000000, 0x00008000); # ID
523    write_le32(169); # Size
524    write_hunk_fix_endian(302872, 169);
525
526    #
527    # Firmware 41, type: STD FW (0x00000000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
528    #
529
530    write_le32(0x00000000); # Type
531    write_le64(0x00000000, 0x0000b700); # ID
532    write_le32(161); # Size
533    write_hunk_fix_endian(303048, 161);
534
535    #
536    # Firmware 42, type: STD FW LCD (0x00001000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
537    #
538
539    write_le32(0x00001000); # Type
540    write_le64(0x00000000, 0x0000b700); # ID
541    write_le32(161); # Size
542    write_hunk_fix_endian(303216, 161);
543
544    #
545    # Firmware 43, type: STD FW LCD NOGD (0x00003000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
546    #
547
548    write_le32(0x00003000); # Type
549    write_le64(0x00000000, 0x0000b700); # ID
550    write_le32(161); # Size
551    write_hunk_fix_endian(303384, 161);
552
553    #
554    # Firmware 44, type: STD FW (0x00000000), id: NTSC/M Jp (0000000000002000), size: 161
555    #
556
557    write_le32(0x00000000); # Type
558    write_le64(0x00000000, 0x00002000); # ID
559    write_le32(161); # Size
560    write_hunk_fix_endian(303552, 161);
561
562    #
563    # Firmware 45, type: STD FW MTS (0x00000004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
564    #
565
566    write_le32(0x00000004); # Type
567    write_le64(0x00000000, 0x0000b700); # ID
568    write_le32(169); # Size
569    write_hunk_fix_endian(303720, 169);
570
571    #
572    # Firmware 46, type: STD FW MTS LCD (0x00001004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
573    #
574
575    write_le32(0x00001004); # Type
576    write_le64(0x00000000, 0x0000b700); # ID
577    write_le32(169); # Size
578    write_hunk_fix_endian(303896, 169);
579
580    #
581    # Firmware 47, type: STD FW MTS LCD NOGD (0x00003004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
582    #
583
584    write_le32(0x00003004); # Type
585    write_le64(0x00000000, 0x0000b700); # ID
586    write_le32(169); # Size
587    write_hunk_fix_endian(304072, 169);
588
589    #
590    # Firmware 48, type: SCODE FW HAS IF (0x60000000), IF = 3.28 MHz id: (0000000000000000), size: 192
591    #
592
593    write_le32(0x60000000); # Type
594    write_le64(0x00000000, 0x00000000); # ID
595    write_le16(3280); # IF
596    write_le32(192); # Size
597    write_hunk(309048, 192);
598
599    #
600    # Firmware 49, type: SCODE FW HAS IF (0x60000000), IF = 3.30 MHz id: (0000000000000000), size: 192
601    #
602
603# write_le32(0x60000000); # Type
604# write_le64(0x00000000, 0x00000000); # ID
605# write_le16(3300); # IF
606# write_le32(192); # Size
607# write_hunk(304440, 192);
608
609    #
610    # Firmware 50, type: SCODE FW HAS IF (0x60000000), IF = 3.44 MHz id: (0000000000000000), size: 192
611    #
612
613    write_le32(0x60000000); # Type
614    write_le64(0x00000000, 0x00000000); # ID
615    write_le16(3440); # IF
616    write_le32(192); # Size
617    write_hunk(309432, 192);
618
619    #
620    # Firmware 51, type: SCODE FW HAS IF (0x60000000), IF = 3.46 MHz id: (0000000000000000), size: 192
621    #
622
623    write_le32(0x60000000); # Type
624    write_le64(0x00000000, 0x00000000); # ID
625    write_le16(3460); # IF
626    write_le32(192); # Size
627    write_hunk(309624, 192);
628
629    #
630    # Firmware 52, type: SCODE FW DTV6 ATSC OREN36 HAS IF (0x60210020), IF = 3.80 MHz id: (0000000000000000), size: 192
631    #
632
633    write_le32(0x60210020); # Type
634    write_le64(0x00000000, 0x00000000); # ID
635    write_le16(3800); # IF
636    write_le32(192); # Size
637    write_hunk(306936, 192);
638
639    #
640    # Firmware 53, type: SCODE FW HAS IF (0x60000000), IF = 4.00 MHz id: (0000000000000000), size: 192
641    #
642
643    write_le32(0x60000000); # Type
644    write_le64(0x00000000, 0x00000000); # ID
645    write_le16(4000); # IF
646    write_le32(192); # Size
647    write_hunk(309240, 192);
648
649    #
650    # Firmware 54, type: SCODE FW DTV6 ATSC TOYOTA388 HAS IF (0x60410020), IF = 4.08 MHz id: (0000000000000000), size: 192
651    #
652
653    write_le32(0x60410020); # Type
654    write_le64(0x00000000, 0x00000000); # ID
655    write_le16(4080); # IF
656    write_le32(192); # Size
657    write_hunk(307128, 192);
658
659    #
660    # Firmware 55, type: SCODE FW HAS IF (0x60000000), IF = 4.20 MHz id: (0000000000000000), size: 192
661    #
662
663    write_le32(0x60000000); # Type
664    write_le64(0x00000000, 0x00000000); # ID
665    write_le16(4200); # IF
666    write_le32(192); # Size
667    write_hunk(308856, 192);
668
669    #
670    # Firmware 56, type: SCODE FW MONO HAS IF (0x60008000), IF = 4.32 MHz id: NTSC/M Kr (0000000000008000), size: 192
671    #
672
673    write_le32(0x60008000); # Type
674    write_le64(0x00000000, 0x00008000); # ID
675    write_le16(4320); # IF
676    write_le32(192); # Size
677    write_hunk(305208, 192);
678
679    #
680    # Firmware 57, type: SCODE FW HAS IF (0x60000000), IF = 4.45 MHz id: (0000000000000000), size: 192
681    #
682
683    write_le32(0x60000000); # Type
684    write_le64(0x00000000, 0x00000000); # ID
685    write_le16(4450); # IF
686    write_le32(192); # Size
687    write_hunk(309816, 192);
688
689    #
690    # Firmware 58, type: SCODE FW MTS LCD NOGD MONO IF HAS IF (0x6002b004), IF = 4.50 MHz id: NTSC PAL/M PAL/N (000000000000b700), size: 192
691    #
692
693    write_le32(0x6002b004); # Type
694    write_le64(0x00000000, 0x0000b700); # ID
695    write_le16(4500); # IF
696    write_le32(192); # Size
697    write_hunk(304824, 192);
698
699    #
700    # Firmware 59, type: SCODE FW LCD NOGD IF HAS IF (0x60023000), IF = 4.60 MHz id: NTSC/M Kr (0000000000008000), size: 192
701    #
702
703    write_le32(0x60023000); # Type
704    write_le64(0x00000000, 0x00008000); # ID
705    write_le16(4600); # IF
706    write_le32(192); # Size
707    write_hunk(305016, 192);
708
709    #
710    # Firmware 60, type: SCODE FW DTV6 QAM DTV7 DTV78 DTV8 ZARLINK456 HAS IF (0x620003e0), IF = 4.76 MHz id: (0000000000000000), size: 192
711    #
712
713    write_le32(0x620003e0); # Type
714    write_le64(0x00000000, 0x00000000); # ID
715    write_le16(4760); # IF
716    write_le32(192); # Size
717    write_hunk(304440, 192);
718
719    #
720    # Firmware 61, type: SCODE FW HAS IF (0x60000000), IF = 4.94 MHz id: (0000000000000000), size: 192
721    #
722
723    write_le32(0x60000000); # Type
724    write_le64(0x00000000, 0x00000000); # ID
725    write_le16(4940); # IF
726    write_le32(192); # Size
727    write_hunk(308664, 192);
728
729    #
730    # Firmware 62, type: SCODE FW HAS IF (0x60000000), IF = 5.26 MHz id: (0000000000000000), size: 192
731    #
732
733    write_le32(0x60000000); # Type
734    write_le64(0x00000000, 0x00000000); # ID
735    write_le16(5260); # IF
736    write_le32(192); # Size
737    write_hunk(307704, 192);
738
739    #
740    # Firmware 63, type: SCODE FW MONO HAS IF (0x60008000), IF = 5.32 MHz id: PAL/BG A2 NICAM (0000000f00000007), size: 192
741    #
742
743    write_le32(0x60008000); # Type
744    write_le64(0x0000000f, 0x00000007); # ID
745    write_le16(5320); # IF
746    write_le32(192); # Size
747    write_hunk(307896, 192);
748
749    #
750    # Firmware 64, type: SCODE FW DTV7 DTV78 DTV8 DIBCOM52 CHINA HAS IF (0x65000380), IF = 5.40 MHz id: (0000000000000000), size: 192
751    #
752
753    write_le32(0x65000380); # Type
754    write_le64(0x00000000, 0x00000000); # ID
755    write_le16(5400); # IF
756    write_le32(192); # Size
757    write_hunk(304248, 192);
758
759    #
760    # Firmware 65, type: SCODE FW DTV6 ATSC OREN538 HAS IF (0x60110020), IF = 5.58 MHz id: (0000000000000000), size: 192
761    #
762
763    write_le32(0x60110020); # Type
764    write_le64(0x00000000, 0x00000000); # ID
765    write_le16(5580); # IF
766    write_le32(192); # Size
767    write_hunk(306744, 192);
768
769    #
770    # Firmware 66, type: SCODE FW HAS IF (0x60000000), IF = 5.64 MHz id: PAL/BG A2 (0000000300000007), size: 192
771    #
772
773    write_le32(0x60000000); # Type
774    write_le64(0x00000003, 0x00000007); # ID
775    write_le16(5640); # IF
776    write_le32(192); # Size
777    write_hunk(305592, 192);
778
779    #
780    # Firmware 67, type: SCODE FW HAS IF (0x60000000), IF = 5.74 MHz id: PAL/BG NICAM (0000000c00000007), size: 192
781    #
782
783    write_le32(0x60000000); # Type
784    write_le64(0x0000000c, 0x00000007); # ID
785    write_le16(5740); # IF
786    write_le32(192); # Size
787    write_hunk(305784, 192);
788
789    #
790    # Firmware 68, type: SCODE FW HAS IF (0x60000000), IF = 5.90 MHz id: (0000000000000000), size: 192
791    #
792
793    write_le32(0x60000000); # Type
794    write_le64(0x00000000, 0x00000000); # ID
795    write_le16(5900); # IF
796    write_le32(192); # Size
797    write_hunk(307512, 192);
798
799    #
800    # Firmware 69, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.00 MHz id: PAL/DK PAL/I SECAM/K3 SECAM/L SECAM/Lc NICAM (0000000c04c000f0), size: 192
801    #
802
803    write_le32(0x60008000); # Type
804    write_le64(0x0000000c, 0x04c000f0); # ID
805    write_le16(6000); # IF
806    write_le32(192); # Size
807    write_hunk(305576, 192);
808
809    #
810    # Firmware 70, type: SCODE FW DTV6 QAM ATSC LG60 F6MHZ HAS IF (0x68050060), IF = 6.20 MHz id: (0000000000000000), size: 192
811    #
812
813    write_le32(0x68050060); # Type
814    write_le64(0x00000000, 0x00000000); # ID
815    write_le16(6200); # IF
816    write_le32(192); # Size
817    write_hunk(306552, 192);
818
819    #
820    # Firmware 71, type: SCODE FW HAS IF (0x60000000), IF = 6.24 MHz id: PAL/I (0000000000000010), size: 192
821    #
822
823    write_le32(0x60000000); # Type
824    write_le64(0x00000000, 0x00000010); # ID
825    write_le16(6240); # IF
826    write_le32(192); # Size
827    write_hunk(305400, 192);
828
829    #
830    # Firmware 72, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.32 MHz id: SECAM/K1 (0000000000200000), size: 192
831    #
832
833    write_le32(0x60008000); # Type
834    write_le64(0x00000000, 0x00200000); # ID
835    write_le16(6320); # IF
836    write_le32(192); # Size
837    write_hunk(308472, 192);
838
839    #
840    # Firmware 73, type: SCODE FW HAS IF (0x60000000), IF = 6.34 MHz id: SECAM/K1 (0000000000200000), size: 192
841    #
842
843    write_le32(0x60000000); # Type
844    write_le64(0x00000000, 0x00200000); # ID
845    write_le16(6340); # IF
846    write_le32(192); # Size
847    write_hunk(306360, 192);
848
849    #
850    # Firmware 74, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.50 MHz id: PAL/DK SECAM/K3 SECAM/L NICAM (0000000c044000e0), size: 192
851    #
852
853    write_le32(0x60008000); # Type
854    write_le64(0x0000000c, 0x044000e0); # ID
855    write_le16(6500); # IF
856    write_le32(192); # Size
857    write_hunk(308280, 192);
858
859    #
860    # Firmware 75, type: SCODE FW DTV6 ATSC ATI638 HAS IF (0x60090020), IF = 6.58 MHz id: (0000000000000000), size: 192
861    #
862
863    write_le32(0x60090020); # Type
864    write_le64(0x00000000, 0x00000000); # ID
865    write_le16(6580); # IF
866    write_le32(192); # Size
867    write_hunk(304632, 192);
868
869    #
870    # Firmware 76, type: SCODE FW HAS IF (0x60000000), IF = 6.60 MHz id: PAL/DK A2 (00000003000000e0), size: 192
871    #
872
873    write_le32(0x60000000); # Type
874    write_le64(0x00000003, 0x000000e0); # ID
875    write_le16(6600); # IF
876    write_le32(192); # Size
877    write_hunk(306168, 192);
878
879    #
880    # Firmware 77, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.68 MHz id: PAL/DK A2 (00000003000000e0), size: 192
881    #
882
883    write_le32(0x60008000); # Type
884    write_le64(0x00000003, 0x000000e0); # ID
885    write_le16(6680); # IF
886    write_le32(192); # Size
887    write_hunk(308088, 192);
888
889    #
890    # Firmware 78, type: SCODE FW DTV6 ATSC TOYOTA794 HAS IF (0x60810020), IF = 8.14 MHz id: (0000000000000000), size: 192
891    #
892
893    write_le32(0x60810020); # Type
894    write_le64(0x00000000, 0x00000000); # ID
895    write_le16(8140); # IF
896    write_le32(192); # Size
897    write_hunk(307320, 192);
898
899    #
900    # Firmware 79, type: SCODE FW HAS IF (0x60000000), IF = 8.20 MHz id: (0000000000000000), size: 192
901    #
902
903# write_le32(0x60000000); # Type
904# write_le64(0x00000000, 0x00000000); # ID
905# write_le16(8200); # IF
906# write_le32(192); # Size
907# write_hunk(308088, 192);
908}
909
910sub main_firmware_27($$$$)
911{
912    my $out;
913    my $j=0;
914    my $outfile = shift;
915    my $name = shift;
916    my $version = shift;
917    my $nr_desc = shift;
918
919    for ($j = length($name); $j <32; $j++) {
920        $name = $name.chr(0);
921    }
922
923    open OUTFILE, ">$outfile";
924    syswrite(OUTFILE, $name);
925    write_le16($version);
926    write_le16($nr_desc);
927
928    #
929    # Firmware 0, type: BASE FW F8MHZ (0x00000003), id: (0000000000000000), size: 8718
930    #
931
932    write_le32(0x00000003); # Type
933    write_le64(0x00000000, 0x00000000); # ID
934    write_le32(8718); # Size
935    write_hunk_fix_endian(813432, 8718);
936
937    #
938    # Firmware 1, type: BASE FW F8MHZ MTS (0x00000007), id: (0000000000000000), size: 8712
939    #
940
941    write_le32(0x00000007); # Type
942    write_le64(0x00000000, 0x00000000); # ID
943    write_le32(8712); # Size
944    write_hunk_fix_endian(822152, 8712);
945
946    #
947    # Firmware 2, type: BASE FW FM (0x00000401), id: (0000000000000000), size: 8562
948    #
949
950    write_le32(0x00000401); # Type
951    write_le64(0x00000000, 0x00000000); # ID
952    write_le32(8562); # Size
953    write_hunk_fix_endian(830872, 8562);
954
955    #
956    # Firmware 3, type: BASE FW FM INPUT1 (0x00000c01), id: (0000000000000000), size: 8576
957    #
958
959    write_le32(0x00000c01); # Type
960    write_le64(0x00000000, 0x00000000); # ID
961    write_le32(8576); # Size
962    write_hunk_fix_endian(839440, 8576);
963
964    #
965    # Firmware 4, type: BASE FW (0x00000001), id: (0000000000000000), size: 8706
966    #
967
968    write_le32(0x00000001); # Type
969    write_le64(0x00000000, 0x00000000); # ID
970    write_le32(8706); # Size
971    write_hunk_fix_endian(848024, 8706);
972
973    #
974    # Firmware 5, type: BASE FW MTS (0x00000005), id: (0000000000000000), size: 8682
975    #
976
977    write_le32(0x00000005); # Type
978    write_le64(0x00000000, 0x00000000); # ID
979    write_le32(8682); # Size
980    write_hunk_fix_endian(856736, 8682);
981
982    #
983    # Firmware 6, type: STD FW (0x00000000), id: PAL/BG A2/A (0000000100000007), size: 161
984    #
985
986    write_le32(0x00000000); # Type
987    write_le64(0x00000001, 0x00000007); # ID
988    write_le32(161); # Size
989    write_hunk_fix_endian(865424, 161);
990
991    #
992    # Firmware 7, type: STD FW MTS (0x00000004), id: PAL/BG A2/A (0000000100000007), size: 169
993    #
994
995    write_le32(0x00000004); # Type
996    write_le64(0x00000001, 0x00000007); # ID
997    write_le32(169); # Size
998    write_hunk_fix_endian(865592, 169);
999
1000    #
1001    # Firmware 8, type: STD FW (0x00000000), id: PAL/BG A2/B (0000000200000007), size: 161
1002    #
1003
1004    write_le32(0x00000000); # Type
1005    write_le64(0x00000002, 0x00000007); # ID
1006    write_le32(161); # Size
1007    write_hunk_fix_endian(865424, 161);
1008
1009    #
1010    # Firmware 9, type: STD FW MTS (0x00000004), id: PAL/BG A2/B (0000000200000007), size: 169
1011    #
1012
1013    write_le32(0x00000004); # Type
1014    write_le64(0x00000002, 0x00000007); # ID
1015    write_le32(169); # Size
1016    write_hunk_fix_endian(865592, 169);
1017
1018    #
1019    # Firmware 10, type: STD FW (0x00000000), id: PAL/BG NICAM/A (0000000400000007), size: 161
1020    #
1021
1022    write_le32(0x00000000); # Type
1023    write_le64(0x00000004, 0x00000007); # ID
1024    write_le32(161); # Size
1025    write_hunk_fix_endian(866112, 161);
1026
1027    #
1028    # Firmware 11, type: STD FW MTS (0x00000004), id: PAL/BG NICAM/A (0000000400000007), size: 169
1029    #
1030
1031    write_le32(0x00000004); # Type
1032    write_le64(0x00000004, 0x00000007); # ID
1033    write_le32(169); # Size
1034    write_hunk_fix_endian(866280, 169);
1035
1036    #
1037    # Firmware 12, type: STD FW (0x00000000), id: PAL/BG NICAM/B (0000000800000007), size: 161
1038    #
1039
1040    write_le32(0x00000000); # Type
1041    write_le64(0x00000008, 0x00000007); # ID
1042    write_le32(161); # Size
1043    write_hunk_fix_endian(866112, 161);
1044
1045    #
1046    # Firmware 13, type: STD FW MTS (0x00000004), id: PAL/BG NICAM/B (0000000800000007), size: 169
1047    #
1048
1049    write_le32(0x00000004); # Type
1050    write_le64(0x00000008, 0x00000007); # ID
1051    write_le32(169); # Size
1052    write_hunk_fix_endian(866280, 169);
1053
1054    #
1055    # Firmware 14, type: STD FW (0x00000000), id: PAL/DK A2 (00000003000000e0), size: 161
1056    #
1057
1058    write_le32(0x00000000); # Type
1059    write_le64(0x00000003, 0x000000e0); # ID
1060    write_le32(161); # Size
1061    write_hunk_fix_endian(866800, 161);
1062
1063    #
1064    # Firmware 15, type: STD FW MTS (0x00000004), id: PAL/DK A2 (00000003000000e0), size: 169
1065    #
1066
1067    write_le32(0x00000004); # Type
1068    write_le64(0x00000003, 0x000000e0); # ID
1069    write_le32(169); # Size
1070    write_hunk_fix_endian(866968, 169);
1071
1072    #
1073    # Firmware 16, type: STD FW (0x00000000), id: PAL/DK NICAM (0000000c000000e0), size: 161
1074    #
1075
1076    write_le32(0x00000000); # Type
1077    write_le64(0x0000000c, 0x000000e0); # ID
1078    write_le32(161); # Size
1079    write_hunk_fix_endian(867144, 161);
1080
1081    #
1082    # Firmware 17, type: STD FW MTS (0x00000004), id: PAL/DK NICAM (0000000c000000e0), size: 169
1083    #
1084
1085    write_le32(0x00000004); # Type
1086    write_le64(0x0000000c, 0x000000e0); # ID
1087    write_le32(169); # Size
1088    write_hunk_fix_endian(867312, 169);
1089
1090    #
1091    # Firmware 18, type: STD FW (0x00000000), id: SECAM/K1 (0000000000200000), size: 161
1092    #
1093
1094    write_le32(0x00000000); # Type
1095    write_le64(0x00000000, 0x00200000); # ID
1096    write_le32(161); # Size
1097    write_hunk_fix_endian(867488, 161);
1098
1099    #
1100    # Firmware 19, type: STD FW MTS (0x00000004), id: SECAM/K1 (0000000000200000), size: 169
1101    #
1102
1103    write_le32(0x00000004); # Type
1104    write_le64(0x00000000, 0x00200000); # ID
1105    write_le32(169); # Size
1106    write_hunk_fix_endian(867656, 169);
1107
1108    #
1109    # Firmware 20, type: STD FW (0x00000000), id: SECAM/K3 (0000000004000000), size: 161
1110    #
1111
1112    write_le32(0x00000000); # Type
1113    write_le64(0x00000000, 0x04000000); # ID
1114    write_le32(161); # Size
1115    write_hunk_fix_endian(867832, 161);
1116
1117    #
1118    # Firmware 21, type: STD FW MTS (0x00000004), id: SECAM/K3 (0000000004000000), size: 169
1119    #
1120
1121    write_le32(0x00000004); # Type
1122    write_le64(0x00000000, 0x04000000); # ID
1123    write_le32(169); # Size
1124    write_hunk_fix_endian(868000, 169);
1125
1126    #
1127    # Firmware 22, type: STD FW D2633 DTV6 ATSC (0x00010030), id: (0000000000000000), size: 149
1128    #
1129
1130    write_le32(0x00010030); # Type
1131    write_le64(0x00000000, 0x00000000); # ID
1132    write_le32(149); # Size
1133    write_hunk_fix_endian(868176, 149);
1134
1135    #
1136    # Firmware 23, type: STD FW D2620 DTV6 QAM (0x00000068), id: (0000000000000000), size: 149
1137    #
1138
1139    write_le32(0x00000068); # Type
1140    write_le64(0x00000000, 0x00000000); # ID
1141    write_le32(149); # Size
1142    write_hunk_fix_endian(868336, 149);
1143
1144    #
1145    # Firmware 24, type: STD FW D2633 DTV6 QAM (0x00000070), id: (0000000000000000), size: 149
1146    #
1147
1148    write_le32(0x00000070); # Type
1149    write_le64(0x00000000, 0x00000000); # ID
1150    write_le32(149); # Size
1151    write_hunk_fix_endian(868488, 149);
1152
1153    #
1154    # Firmware 25, type: STD FW D2620 DTV7 (0x00000088), id: (0000000000000000), size: 149
1155    #
1156
1157    write_le32(0x00000088); # Type
1158    write_le64(0x00000000, 0x00000000); # ID
1159    write_le32(149); # Size
1160    write_hunk_fix_endian(868648, 149);
1161
1162    #
1163    # Firmware 26, type: STD FW D2633 DTV7 (0x00000090), id: (0000000000000000), size: 149
1164    #
1165
1166    write_le32(0x00000090); # Type
1167    write_le64(0x00000000, 0x00000000); # ID
1168    write_le32(149); # Size
1169    write_hunk_fix_endian(868800, 149);
1170
1171    #
1172    # Firmware 27, type: STD FW D2620 DTV78 (0x00000108), id: (0000000000000000), size: 149
1173    #
1174
1175    write_le32(0x00000108); # Type
1176    write_le64(0x00000000, 0x00000000); # ID
1177    write_le32(149); # Size
1178    write_hunk_fix_endian(868960, 149);
1179
1180    #
1181    # Firmware 28, type: STD FW D2633 DTV78 (0x00000110), id: (0000000000000000), size: 149
1182    #
1183
1184    write_le32(0x00000110); # Type
1185    write_le64(0x00000000, 0x00000000); # ID
1186    write_le32(149); # Size
1187    write_hunk_fix_endian(869112, 149);
1188
1189    #
1190    # Firmware 29, type: STD FW D2620 DTV8 (0x00000208), id: (0000000000000000), size: 149
1191    #
1192
1193    write_le32(0x00000208); # Type
1194    write_le64(0x00000000, 0x00000000); # ID
1195    write_le32(149); # Size
1196    write_hunk_fix_endian(868648, 149);
1197
1198    #
1199    # Firmware 30, type: STD FW D2633 DTV8 (0x00000210), id: (0000000000000000), size: 149
1200    #
1201
1202    write_le32(0x00000210); # Type
1203    write_le64(0x00000000, 0x00000000); # ID
1204    write_le32(149); # Size
1205    write_hunk_fix_endian(868800, 149);
1206
1207    #
1208    # Firmware 31, type: STD FW FM (0x00000400), id: (0000000000000000), size: 135
1209    #
1210
1211    write_le32(0x00000400); # Type
1212    write_le64(0x00000000, 0x00000000); # ID
1213    write_le32(135); # Size
1214    write_hunk_fix_endian(869584, 135);
1215
1216    #
1217    # Firmware 32, type: STD FW (0x00000000), id: PAL/I (0000000000000010), size: 161
1218    #
1219
1220    write_le32(0x00000000); # Type
1221    write_le64(0x00000000, 0x00000010); # ID
1222    write_le32(161); # Size
1223    write_hunk_fix_endian(869728, 161);
1224
1225    #
1226    # Firmware 33, type: STD FW MTS (0x00000004), id: PAL/I (0000000000000010), size: 169
1227    #
1228
1229    write_le32(0x00000004); # Type
1230    write_le64(0x00000000, 0x00000010); # ID
1231    write_le32(169); # Size
1232    write_hunk_fix_endian(869896, 169);
1233
1234    #
1235    # Firmware 34, type: STD FW (0x00000000), id: SECAM/L AM (0000001000400000), size: 169
1236    #
1237
1238    write_le32(0x00000000); # Type
1239    write_le64(0x00000010, 0x00400000); # ID
1240    write_le32(169); # Size
1241    write_hunk_fix_endian(870072, 169);
1242
1243    #
1244    # Firmware 35, type: STD FW (0x00000000), id: SECAM/L NICAM (0000000c00400000), size: 161
1245    #
1246
1247    write_le32(0x00000000); # Type
1248    write_le64(0x0000000c, 0x00400000); # ID
1249    write_le32(161); # Size
1250    write_hunk_fix_endian(870248, 161);
1251
1252    #
1253    # Firmware 36, type: STD FW (0x00000000), id: SECAM/Lc (0000000000800000), size: 161
1254    #
1255
1256    write_le32(0x00000000); # Type
1257    write_le64(0x00000000, 0x00800000); # ID
1258    write_le32(161); # Size
1259    write_hunk_fix_endian(870416, 161);
1260
1261    #
1262    # Firmware 37, type: STD FW (0x00000000), id: NTSC/M Kr (0000000000008000), size: 161
1263    #
1264
1265    write_le32(0x00000000); # Type
1266    write_le64(0x00000000, 0x00008000); # ID
1267    write_le32(161); # Size
1268    write_hunk_fix_endian(870584, 161);
1269
1270    #
1271    # Firmware 38, type: STD FW LCD (0x00001000), id: NTSC/M Kr (0000000000008000), size: 161
1272    #
1273
1274    write_le32(0x00001000); # Type
1275    write_le64(0x00000000, 0x00008000); # ID
1276    write_le32(161); # Size
1277    write_hunk_fix_endian(870752, 161);
1278
1279    #
1280    # Firmware 39, type: STD FW LCD NOGD (0x00003000), id: NTSC/M Kr (0000000000008000), size: 161
1281    #
1282
1283    write_le32(0x00003000); # Type
1284    write_le64(0x00000000, 0x00008000); # ID
1285    write_le32(161); # Size
1286    write_hunk_fix_endian(870920, 161);
1287
1288    #
1289    # Firmware 40, type: STD FW MTS (0x00000004), id: NTSC/M Kr (0000000000008000), size: 169
1290    #
1291
1292    write_le32(0x00000004); # Type
1293    write_le64(0x00000000, 0x00008000); # ID
1294    write_le32(169); # Size
1295    write_hunk_fix_endian(871088, 169);
1296
1297    #
1298    # Firmware 41, type: STD FW (0x00000000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
1299    #
1300
1301    write_le32(0x00000000); # Type
1302    write_le64(0x00000000, 0x0000b700); # ID
1303    write_le32(161); # Size
1304    write_hunk_fix_endian(871264, 161);
1305
1306    #
1307    # Firmware 42, type: STD FW LCD (0x00001000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
1308    #
1309
1310    write_le32(0x00001000); # Type
1311    write_le64(0x00000000, 0x0000b700); # ID
1312    write_le32(161); # Size
1313    write_hunk_fix_endian(871432, 161);
1314
1315    #
1316    # Firmware 43, type: STD FW LCD NOGD (0x00003000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
1317    #
1318
1319    write_le32(0x00003000); # Type
1320    write_le64(0x00000000, 0x0000b700); # ID
1321    write_le32(161); # Size
1322    write_hunk_fix_endian(871600, 161);
1323
1324    #
1325    # Firmware 44, type: STD FW (0x00000000), id: NTSC/M Jp (0000000000002000), size: 161
1326    #
1327
1328    write_le32(0x00000000); # Type
1329    write_le64(0x00000000, 0x00002000); # ID
1330    write_le32(161); # Size
1331    write_hunk_fix_endian(871264, 161);
1332
1333    #
1334    # Firmware 45, type: STD FW MTS (0x00000004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
1335    #
1336
1337    write_le32(0x00000004); # Type
1338    write_le64(0x00000000, 0x0000b700); # ID
1339    write_le32(169); # Size
1340    write_hunk_fix_endian(871936, 169);
1341
1342    #
1343    # Firmware 46, type: STD FW MTS LCD (0x00001004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
1344    #
1345
1346    write_le32(0x00001004); # Type
1347    write_le64(0x00000000, 0x0000b700); # ID
1348    write_le32(169); # Size
1349    write_hunk_fix_endian(872112, 169);
1350
1351    #
1352    # Firmware 47, type: STD FW MTS LCD NOGD (0x00003004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
1353    #
1354
1355    write_le32(0x00003004); # Type
1356    write_le64(0x00000000, 0x0000b700); # ID
1357    write_le32(169); # Size
1358    write_hunk_fix_endian(872288, 169);
1359
1360    #
1361    # Firmware 48, type: SCODE FW HAS IF (0x60000000), IF = 3.28 MHz id: (0000000000000000), size: 192
1362    #
1363
1364    write_le32(0x60000000); # Type
1365    write_le64(0x00000000, 0x00000000); # ID
1366    write_le16(3280); # IF
1367    write_le32(192); # Size
1368    write_hunk(811896, 192);
1369
1370    #
1371    # Firmware 49, type: SCODE FW HAS IF (0x60000000), IF = 3.30 MHz id: (0000000000000000), size: 192
1372    #
1373
1374    write_le32(0x60000000); # Type
1375    write_le64(0x00000000, 0x00000000); # ID
1376    write_le16(3300); # IF
1377    write_le32(192); # Size
1378    write_hunk(813048, 192);
1379
1380    #
1381    # Firmware 50, type: SCODE FW HAS IF (0x60000000), IF = 3.44 MHz id: (0000000000000000), size: 192
1382    #
1383
1384    write_le32(0x60000000); # Type
1385    write_le64(0x00000000, 0x00000000); # ID
1386    write_le16(3440); # IF
1387    write_le32(192); # Size
1388    write_hunk(812280, 192);
1389
1390    #
1391    # Firmware 51, type: SCODE FW HAS IF (0x60000000), IF = 3.46 MHz id: (0000000000000000), size: 192
1392    #
1393
1394    write_le32(0x60000000); # Type
1395    write_le64(0x00000000, 0x00000000); # ID
1396    write_le16(3460); # IF
1397    write_le32(192); # Size
1398    write_hunk(812472, 192);
1399
1400    #
1401    # Firmware 52, type: SCODE FW DTV6 ATSC OREN36 HAS IF (0x60210020), IF = 3.80 MHz id: (0000000000000000), size: 192
1402    #
1403
1404    write_le32(0x60210020); # Type
1405    write_le64(0x00000000, 0x00000000); # ID
1406    write_le16(3800); # IF
1407    write_le32(192); # Size
1408    write_hunk(809784, 192);
1409
1410    #
1411    # Firmware 53, type: SCODE FW HAS IF (0x60000000), IF = 4.00 MHz id: (0000000000000000), size: 192
1412    #
1413
1414    write_le32(0x60000000); # Type
1415    write_le64(0x00000000, 0x00000000); # ID
1416    write_le16(4000); # IF
1417    write_le32(192); # Size
1418    write_hunk(812088, 192);
1419
1420    #
1421    # Firmware 54, type: SCODE FW DTV6 ATSC TOYOTA388 HAS IF (0x60410020), IF = 4.08 MHz id: (0000000000000000), size: 192
1422    #
1423
1424    write_le32(0x60410020); # Type
1425    write_le64(0x00000000, 0x00000000); # ID
1426    write_le16(4080); # IF
1427    write_le32(192); # Size
1428    write_hunk(809976, 192);
1429
1430    #
1431    # Firmware 55, type: SCODE FW HAS IF (0x60000000), IF = 4.20 MHz id: (0000000000000000), size: 192
1432    #
1433
1434    write_le32(0x60000000); # Type
1435    write_le64(0x00000000, 0x00000000); # ID
1436    write_le16(4200); # IF
1437    write_le32(192); # Size
1438    write_hunk(811704, 192);
1439
1440    #
1441    # Firmware 56, type: SCODE FW MONO HAS IF (0x60008000), IF = 4.32 MHz id: NTSC/M Kr (0000000000008000), size: 192
1442    #
1443
1444    write_le32(0x60008000); # Type
1445    write_le64(0x00000000, 0x00008000); # ID
1446    write_le16(4320); # IF
1447    write_le32(192); # Size
1448    write_hunk(808056, 192);
1449
1450    #
1451    # Firmware 57, type: SCODE FW HAS IF (0x60000000), IF = 4.45 MHz id: (0000000000000000), size: 192
1452    #
1453
1454    write_le32(0x60000000); # Type
1455    write_le64(0x00000000, 0x00000000); # ID
1456    write_le16(4450); # IF
1457    write_le32(192); # Size
1458    write_hunk(812664, 192);
1459
1460    #
1461    # Firmware 58, type: SCODE FW MTS LCD NOGD MONO IF HAS IF (0x6002b004), IF = 4.50 MHz id: NTSC PAL/M PAL/N (000000000000b700), size: 192
1462    #
1463
1464    write_le32(0x6002b004); # Type
1465    write_le64(0x00000000, 0x0000b700); # ID
1466    write_le16(4500); # IF
1467    write_le32(192); # Size
1468    write_hunk(807672, 192);
1469
1470    #
1471    # Firmware 59, type: SCODE FW LCD NOGD IF HAS IF (0x60023000), IF = 4.60 MHz id: NTSC/M Kr (0000000000008000), size: 192
1472    #
1473
1474    write_le32(0x60023000); # Type
1475    write_le64(0x00000000, 0x00008000); # ID
1476    write_le16(4600); # IF
1477    write_le32(192); # Size
1478    write_hunk(807864, 192);
1479
1480    #
1481    # Firmware 60, type: SCODE FW DTV6 QAM DTV7 DTV78 DTV8 ZARLINK456 HAS IF (0x620003e0), IF = 4.76 MHz id: (0000000000000000), size: 192
1482    #
1483
1484    write_le32(0x620003e0); # Type
1485    write_le64(0x00000000, 0x00000000); # ID
1486    write_le16(4760); # IF
1487    write_le32(192); # Size
1488    write_hunk(807288, 192);
1489
1490    #
1491    # Firmware 61, type: SCODE FW HAS IF (0x60000000), IF = 4.94 MHz id: (0000000000000000), size: 192
1492    #
1493
1494    write_le32(0x60000000); # Type
1495    write_le64(0x00000000, 0x00000000); # ID
1496    write_le16(4940); # IF
1497    write_le32(192); # Size
1498    write_hunk(811512, 192);
1499
1500    #
1501    # Firmware 62, type: SCODE FW HAS IF (0x60000000), IF = 5.26 MHz id: (0000000000000000), size: 192
1502    #
1503
1504    write_le32(0x60000000); # Type
1505    write_le64(0x00000000, 0x00000000); # ID
1506    write_le16(5260); # IF
1507    write_le32(192); # Size
1508    write_hunk(810552, 192);
1509
1510    #
1511    # Firmware 63, type: SCODE FW MONO HAS IF (0x60008000), IF = 5.32 MHz id: PAL/BG A2 NICAM (0000000f00000007), size: 192
1512    #
1513
1514    write_le32(0x60008000); # Type
1515    write_le64(0x0000000f, 0x00000007); # ID
1516    write_le16(5320); # IF
1517    write_le32(192); # Size
1518    write_hunk(810744, 192);
1519
1520    #
1521    # Firmware 64, type: SCODE FW DTV7 DTV78 DTV8 DIBCOM52 CHINA HAS IF (0x65000380), IF = 5.40 MHz id: (0000000000000000), size: 192
1522    #
1523
1524    write_le32(0x65000380); # Type
1525    write_le64(0x00000000, 0x00000000); # ID
1526    write_le16(5400); # IF
1527    write_le32(192); # Size
1528    write_hunk(807096, 192);
1529
1530    #
1531    # Firmware 65, type: SCODE FW DTV6 ATSC OREN538 HAS IF (0x60110020), IF = 5.58 MHz id: (0000000000000000), size: 192
1532    #
1533
1534    write_le32(0x60110020); # Type
1535    write_le64(0x00000000, 0x00000000); # ID
1536    write_le16(5580); # IF
1537    write_le32(192); # Size
1538    write_hunk(809592, 192);
1539
1540    #
1541    # Firmware 66, type: SCODE FW HAS IF (0x60000000), IF = 5.64 MHz id: PAL/BG A2 (0000000300000007), size: 192
1542    #
1543
1544    write_le32(0x60000000); # Type
1545    write_le64(0x00000003, 0x00000007); # ID
1546    write_le16(5640); # IF
1547    write_le32(192); # Size
1548    write_hunk(808440, 192);
1549
1550    #
1551    # Firmware 67, type: SCODE FW HAS IF (0x60000000), IF = 5.74 MHz id: PAL/BG NICAM (0000000c00000007), size: 192
1552    #
1553
1554    write_le32(0x60000000); # Type
1555    write_le64(0x0000000c, 0x00000007); # ID
1556    write_le16(5740); # IF
1557    write_le32(192); # Size
1558    write_hunk(808632, 192);
1559
1560    #
1561    # Firmware 68, type: SCODE FW HAS IF (0x60000000), IF = 5.90 MHz id: (0000000000000000), size: 192
1562    #
1563
1564    write_le32(0x60000000); # Type
1565    write_le64(0x00000000, 0x00000000); # ID
1566    write_le16(5900); # IF
1567    write_le32(192); # Size
1568    write_hunk(810360, 192);
1569
1570    #
1571    # Firmware 69, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.00 MHz id: PAL/DK PAL/I SECAM/K3 SECAM/L SECAM/Lc NICAM (0000000c04c000f0), size: 192
1572    #
1573
1574    write_le32(0x60008000); # Type
1575    write_le64(0x0000000c, 0x04c000f0); # ID
1576    write_le16(6000); # IF
1577    write_le32(192); # Size
1578    write_hunk(808824, 192);
1579
1580    #
1581    # Firmware 70, type: SCODE FW DTV6 QAM ATSC LG60 F6MHZ HAS IF (0x68050060), IF = 6.20 MHz id: (0000000000000000), size: 192
1582    #
1583
1584    write_le32(0x68050060); # Type
1585    write_le64(0x00000000, 0x00000000); # ID
1586    write_le16(6200); # IF
1587    write_le32(192); # Size
1588    write_hunk(809400, 192);
1589
1590    #
1591    # Firmware 71, type: SCODE FW HAS IF (0x60000000), IF = 6.24 MHz id: PAL/I (0000000000000010), size: 192
1592    #
1593
1594    write_le32(0x60000000); # Type
1595    write_le64(0x00000000, 0x00000010); # ID
1596    write_le16(6240); # IF
1597    write_le32(192); # Size
1598    write_hunk(808248, 192);
1599
1600    #
1601    # Firmware 72, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.32 MHz id: SECAM/K1 (0000000000200000), size: 192
1602    #
1603
1604    write_le32(0x60008000); # Type
1605    write_le64(0x00000000, 0x00200000); # ID
1606    write_le16(6320); # IF
1607    write_le32(192); # Size
1608    write_hunk(811320, 192);
1609
1610    #
1611    # Firmware 73, type: SCODE FW HAS IF (0x60000000), IF = 6.34 MHz id: SECAM/K1 (0000000000200000), size: 192
1612    #
1613
1614    write_le32(0x60000000); # Type
1615    write_le64(0x00000000, 0x00200000); # ID
1616    write_le16(6340); # IF
1617    write_le32(192); # Size
1618    write_hunk(809208, 192);
1619
1620    #
1621    # Firmware 74, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.50 MHz id: PAL/DK SECAM/K3 SECAM/L NICAM (0000000c044000e0), size: 192
1622    #
1623
1624    write_le32(0x60008000); # Type
1625    write_le64(0x0000000c, 0x044000e0); # ID
1626    write_le16(6500); # IF
1627    write_le32(192); # Size
1628    write_hunk(811128, 192);
1629
1630    #
1631    # Firmware 75, type: SCODE FW DTV6 ATSC ATI638 HAS IF (0x60090020), IF = 6.58 MHz id: (0000000000000000), size: 192
1632    #
1633
1634    write_le32(0x60090020); # Type
1635    write_le64(0x00000000, 0x00000000); # ID
1636    write_le16(6580); # IF
1637    write_le32(192); # Size
1638    write_hunk(807480, 192);
1639
1640    #
1641    # Firmware 76, type: SCODE FW HAS IF (0x60000000), IF = 6.60 MHz id: PAL/DK A2 (00000003000000e0), size: 192
1642    #
1643
1644    write_le32(0x60000000); # Type
1645    write_le64(0x00000003, 0x000000e0); # ID
1646    write_le16(6600); # IF
1647    write_le32(192); # Size
1648    write_hunk(809016, 192);
1649
1650    #
1651    # Firmware 77, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.68 MHz id: PAL/DK A2 (00000003000000e0), size: 192
1652    #
1653
1654    write_le32(0x60008000); # Type
1655    write_le64(0x00000003, 0x000000e0); # ID
1656    write_le16(6680); # IF
1657    write_le32(192); # Size
1658    write_hunk(810936, 192);
1659
1660    #
1661    # Firmware 78, type: SCODE FW DTV6 ATSC TOYOTA794 HAS IF (0x60810020), IF = 8.14 MHz id: (0000000000000000), size: 192
1662    #
1663
1664    write_le32(0x60810020); # Type
1665    write_le64(0x00000000, 0x00000000); # ID
1666    write_le16(8140); # IF
1667    write_le32(192); # Size
1668    write_hunk(810168, 192);
1669
1670    #
1671    # Firmware 79, type: SCODE FW HAS IF (0x60000000), IF = 8.20 MHz id: (0000000000000000), size: 192
1672    #
1673
1674    write_le32(0x60000000); # Type
1675    write_le64(0x00000000, 0x00000000); # ID
1676    write_le16(8200); # IF
1677    write_le32(192); # Size
1678    write_hunk(812856, 192);
1679}
1680
1681
1682sub extract_firmware {
1683    my $sourcefile_24 = "UDXTTM6000.sys";
1684    my $hash_24 = "cb9deb5508a5e150af2880f5b0066d78";
1685    my $outfile_24 = "xc3028-v24.fw";
1686    my $name_24 = "xc2028 firmware";
1687    my $version_24 = 516;
1688    my $nr_desc_24 = 77;
1689    my $out;
1690
1691    my $sourcefile_27 = "hcw85bda.sys";
1692    my $hash_27 = "0e44dbf63bb0169d57446aec21881ff2";
1693    my $outfile_27 = "xc3028-v27.fw";
1694    my $name_27 = "xc2028 firmware";
1695    my $version_27 = 519;
1696    my $nr_desc_27 = 80;
1697    my $out;
1698
1699    if (-e $sourcefile_24) {
1700        verify($sourcefile_24, $hash_24);
1701
1702        open INFILE, "<$sourcefile_24";
1703        main_firmware_24($outfile_24, $name_24, $version_24, $nr_desc_24);
1704        close INFILE;
1705    }
1706
1707    if (-e $sourcefile_27) {
1708        verify($sourcefile_27, $hash_27);
1709
1710        open INFILE, "<$sourcefile_27";
1711        main_firmware_27($outfile_27, $name_27, $version_27, $nr_desc_27);
1712        close INFILE;
1713    }
1714}
1715
1716extract_firmware;
1717printf "Firmwares generated.\n";
1718

Archive Download this file



interactive