mirror of
https://github.com/DoctorWkt/pdp7-unix.git
synced 2026-01-13 15:27:39 +00:00
27 lines
784 B
Perl
Executable File
27 lines
784 B
Perl
Executable File
#!/usr/bin/perl
|
|
#
|
|
# Dump a binary PDP-7 file where a word is encoded as three bytes,
|
|
# with sixbits are stored big-endian in each of the three byte.
|
|
#
|
|
use strict;
|
|
use warnings;
|
|
|
|
die("Usage: $0 binaryfile\n") if (@ARGV==0);
|
|
|
|
open(my $IN, "<", $ARGV[0]) || die("Can't open $ARGV[0]: $!\n");
|
|
while (1) {
|
|
# Convert three bytes into one 18-bit word
|
|
my $result= read($IN, my $three, 3);
|
|
last if ($result != 3); # Not enough bytes read
|
|
my ($b1, $b2, $b3)= unpack("CCC", $three);
|
|
my $word= (($b1 & 077) << 12) | (($b2 & 077) << 6) | ($b3 & 077);
|
|
|
|
my $c1= ($word >> 9) & 0777;
|
|
$c1= (($c1 >= 32) && ($c1 <= 126)) ? chr($c1) : ' ';
|
|
my $c2= $word & 0777;
|
|
$c2= (($c2 >= 32) && ($c2 <= 126)) ? chr($c2) : ' ';
|
|
printf("%06o %s%s\n", $word, $c1, $c2)
|
|
}
|
|
close($IN);
|
|
exit(0);
|