-if ( $cmd =~ /(\d+)=(\d)/ ) {
- my ( $pin, $v ) = ( $1, $2 );
- warn "# pin $pin = $v\n";
+if ( $cmd =~ /(p|o)(\d+)=(\d+)/ ) {
+ my ( $what, $p, $v ) = ( $1, $2, $3 );
+
+ my $old_bsr = reverse $BSR;
+ my $b = $old_bsr;
+
+ if ( $what eq 'p' && length($v) == 1 ) {
+
+ my $pin = $p;
+ warn "# pin $pin = $v\n";
+
+ my $io = $pin2io->[$pin];
+ my $bit = $io2bit->{$io}->[0];
+
+ $b =
+ substr($old_bsr,0,$bit+1) # leave input as-is
+ . ( $v eq 'Z' ? 1 : 0 ) # control
+ . ( $v & 1 ) # output
+ . substr($old_bsr,$bit+3)
+ ;