--- M6502/Tape.pm 2007/08/03 10:29:33 109 +++ M6502/Tape.pm 2007/08/03 12:21:47 110 @@ -6,7 +6,7 @@ use warnings; use base qw/Class::Accessor/; -__PACKAGE__->mk_accessors(qw(tape tape_pos)); +__PACKAGE__->mk_accessors(qw(tape tape_pos tape_rate)); use File::Slurp; use Carp qw/confess/; @@ -33,6 +33,8 @@ } } +my $loop; + sub read_tape { my $self = shift; if ( ! $self->tape ) { @@ -45,9 +47,14 @@ _warn "end of tape [$pos]"; return -1; } - my $byte = substr($self->tape,$pos++,1); - $self->tape_pos( $pos ); - return ord($byte); + my $byte = ord(substr($self->tape,$pos,1)); + + if ( ++$loop % $self->tape_rate == 0 ) { + warn sprintf("tape pos %d = %02x\n", $pos, $byte); + $pos++; + $self->tape_pos( $pos ); + } + return $byte; } =head2 load_tape @@ -64,7 +71,8 @@ $self->tape_pos( 0 ); $self->tape( $tape ); - warn "loaded tape $path ", -s $path, " bytes\n"; + $self->tape_rate( 512 ); + warn "loaded tape $path ", -s $path, " bytes rate ", $self->tape_rate, "\n"; return 1; }