--- M6502/Tape.pm 2007/08/03 12:21:47 110 +++ M6502/Tape.pm 2007/08/03 20:01:51 114 @@ -33,7 +33,7 @@ } } -my $loop; +my @tape_bits; sub read_tape { my $self = shift; @@ -47,14 +47,19 @@ _warn "end of tape [$pos]"; return -1; } - my $byte = ord(substr($self->tape,$pos,1)); - if ( ++$loop % $self->tape_rate == 0 ) { + if ( ! @tape_bits ) { + my $byte = ord( substr($self->tape,$pos,1) ); warn sprintf("tape pos %d = %02x\n", $pos, $byte); + $pos++; $self->tape_pos( $pos ); + + @tape_bits = split(//, unpack("B8",$byte) ); } - return $byte; + my $bit = shift @tape_bits ? 0xff : 0x00; + warn "\t$bit\n"; + return $bit; } =head2 load_tape