Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
   1#!/usr/bin/env perl
   2# SPDX-License-Identifier: GPL-2.0-only
   3
   4# Copyright (c) Mauro Carvalho Chehab <mchehab@kernel.org>
   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";