The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# $Id: fuse2yaml.in,v 1.4 2008/02/23 13:14:54 drhyde Exp $

use strict;
use warnings;
use YAML::Tiny;

undef $/;

open(my $fh, 'tests.in');
my @in = split(/\n\n+/, <$fh>);
close($fh);

foreach (@in) {
    my $y = YAML::Tiny->new();
    my @bits = split(/\s+/, $_);
    my $testspec = {
        name => shift(@bits),
        registers => {
            AF   => hex('0x'.shift(@bits)),
            BC   => hex('0x'.shift(@bits)),
            DE   => hex('0x'.shift(@bits)),
            HL   => hex('0x'.shift(@bits)),
            AF_  => hex('0x'.shift(@bits)),
            BC_  => hex('0x'.shift(@bits)),
            DE_  => hex('0x'.shift(@bits)),
            HL_  => hex('0x'.shift(@bits)),
            IX   => hex('0x'.shift(@bits)),
            IY   => hex('0x'.shift(@bits)),
            SP   => hex('0x'.shift(@bits)),
            PC   => hex('0x'.shift(@bits)),
            I    => hex('0x'.shift(@bits)),
            R    => hex('0x'.shift(@bits)),
        },
        IFF1 => hex('0x'.shift(@bits)),
        IFF2 => hex('0x'.shift(@bits)),
        IM   => hex('0x'.shift(@bits)),
        halted => shift(@bits),
        # Ts => shift(@bits),
        mem => {},
    };
    shift(@bits); # Ts no longer used
    my $prev = -1;
    my $thisseq;
    foreach my $this (@bits) {
        last if($prev eq $this && $this eq -1);
        if($prev eq -1) {
            $thisseq = $testspec->{mem}->{hex('0x'.$this)} = [];
        }
        if($this ne -1 && $prev ne -1) {
            push @{$thisseq}, hex('0x'.$this);
        }
        $prev = $this;
    }
    $y->[0] = $testspec;
    $y->write($testspec->{name}.".in.yml");
}