|
|
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.