|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.