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