Annotation of nono/util/runcom/z80toc.pl, revision 1.1

1.1     ! root        1: #!/usr/bin/env perl
        !             2: 
        !             3: #
        !             4: # nono
        !             5: # Copyright (C) 2023 nono project
        !             6: # Licensed under nono-license.txt
        !             7: #
        !             8: 
        !             9: # z80-asm の出力する .z80 形式を C ソースに変換して標準出力に出力する。
        !            10: #
        !            11: # usage: z80toc.pl <infile.z80> [<outfile.c>]
        !            12: 
        !            13: {
        !            14:        $filename = $ARGV[0];
        !            15:        $filesize = -s $filename;
        !            16: 
        !            17:        if (@ARGV > 1) {
        !            18:                $outfile = $ARGV[1];
        !            19:        } else {
        !            20:                $outfile = $filename;
        !            21:                $outfile =~ s/(\.z80|)$/.c/;
        !            22:        }
        !            23: 
        !            24:        # ファイルを全部読み込む
        !            25:        open(IN, $filename) or die;
        !            26:        binmode(IN);
        !            27:        read(IN, $magic, 8);
        !            28:        read(IN, $dummylen, 2);
        !            29:        read(IN, $data, $filesize - 10);
        !            30:        close(IN);
        !            31: 
        !            32:        # マジック照合
        !            33:        if ($magic != "Z80ASM\x1a\x0a") {
        !            34:                die("${filename} is not z80-asm .z80 object format");
        !            35:        }
        !            36: 
        !            37:        $varname = $filename;
        !            38:        $varname =~ s/\.z80$//;
        !            39: 
        !            40:        # 出力
        !            41:        open(OUT, ">$outfile") or die;
        !            42:        printf OUT "int ${varname}_datalen = %d;\n", length($data);
        !            43:        print OUT "const unsigned char ${varname}_data[] = {\n";
        !            44:        $i = 0;
        !            45:        for (; $i < length($data); $i++) {
        !            46:                if ($i % 8 == 0) {
        !            47:                        print OUT "\t";
        !            48:                }
        !            49:                $ch = ord(substr($data, $i, 1));
        !            50:                printf OUT "0x%02x,", $ch;
        !            51:                if ($i % 8 != 7) {
        !            52:                        print OUT " ";
        !            53:                } else {
        !            54:                        print OUT "\n";
        !            55:                }
        !            56:        }
        !            57:        if ($i % 8 != 0) {
        !            58:                print OUT "\n";
        !            59:        }
        !            60:        print OUT "};\n";
        !            61: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.