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