cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

extract_xc3028.pl (45686B)


      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";