History

[media] extract_xc3028.pl: move it to scripts/dir

This doesn't belong at documentation. Move it to scripts.

Mauro Carvalho Chehab committed 10 years ago

Commit d8e92301 parent 651af5e1 file · +0 −0Browse files

Showing the changes to scripts (1 of 1 file). Show all

Unified · Split

scripts/extract_xc3028.pl+1717−0
@@ -0,0 +1,1717 @@
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;
23+use IO::Handle;
24+
25+my $debug=0;
26+
27+sub 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+
44+sub 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+
63+sub 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+
72+sub 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+
83+sub 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+
102+sub 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+
117+sub 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+
144+sub 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+
910+sub 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+
1682+sub 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+
1716+extract_firmware;
1717+printf "Firmwares generated.\n";