Changeset 1747


Ignore:
Timestamp:
Feb 2, 2023, 1:50:37 PM (22 months ago)
Author:
pfusik
Message:

Fix CMC tunes reading from uninitialized page $FF.

Continuing with tunes where the PLAYER block comes first.

Location:
trunk
Files:
24 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/fix-cmc-patterns.pl

    r1746 r1747  
    77                if (/^TYPE C\r\nMUSIC (\w{4})\r\n/m) {
    88                        my $music = hex($1);
    9                         my $ff = index $_, "\xff\xff";
    10                         my ($start, $end) = unpack("x${ff}xxvv", $_);
    11                         if ($start == $music) {
    12 #                               printf "MUSIC %04X START %04X END %04X %s\n", $music, $start, $end, $f;
    13                                 my $o = $_;
    14                                 for my $p (0 .. 63) {
    15                                         my ($l, $h) = unpack("x${ff}x26x${p}Cx63C", $_);
    16                                         if ($h == 0xff && $l != 0xff) {
    17                                                 printf "pattern %02x at %02x%02x %s\n", $p, $h, $l, $f;
    18                                                 die if substr($_, $ff + 26 + $p, 1) ne chr($l);
    19                                                 substr($_, $ff + 26 + $p, 1, "\xff");
     9                        my $i = 2 + index $_, "\xff\xff";
     10                        while ($i < length) {
     11                                my ($start, $end) = unpack("x${i}vv", $_);
     12                                # printf "MUSIC %04X START %04X END %04X %s\n", $music, $start, $end, $f;
     13                                if ($start == $music) {
     14                                        my $o = $_;
     15                                        for my $p (0 .. 63) {
     16                                                my ($l, $h) = unpack("x${i}x24x${p}Cx63C", $_);
     17                                                if ($h == 0xff && $l != 0xff) {
     18                                                        printf "pattern %02x at %02x%02x %s\n", $p, $h, $l, $f;
     19                                                        die if substr($_, $i + 24 + $p, 1) ne chr($l);
     20                                                        substr($_, $i + 24 + $p, 1, "\xff");
     21                                                }
    2022                                        }
     23                                        if ($_ ne $o) {
     24                                                open F, ">../$f" and binmode F and print F $_ or die;
     25                                        }
     26                                        last;
    2127                                }
    22                                 if ($_ ne $o) {
    23                                         open F, ">../aasma/$f" and binmode F and print F $_;
    24                                 }
    25                         }
    26                         else {
    2728                                printf "MUSIC %04X START %04X END %04X %s\n", $music, $start, $end, $f;
     29                                $i += 5 + $end - $start;
     30                                print "MUSIC block not found in $f\n" if $i >= length;
    2831                        }
    2932                }
Note: See TracChangeset for help on using the changeset viewer.