1
0
mirror of https://github.com/DoctorWkt/pdp7-unix.git synced 2026-01-13 07:20:05 +00:00
2018-08-20 21:03:24 +08:00

27 lines
788 B
Perl
Executable File

#!/usr/bin/env 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);