Annotation of nono/util/runcom/z80toc.pl, revision 1.1.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.