--- M6502/Tape.pm 2007/08/03 20:01:51 114 +++ Tape.pm 2007/08/05 13:27:27 145 @@ -6,7 +6,7 @@ use warnings; use base qw/Class::Accessor/; -__PACKAGE__->mk_accessors(qw(tape tape_pos tape_rate)); +__PACKAGE__->mk_accessors(qw(tape tape_pos tape_rate trace)); use File::Slurp; use Carp qw/confess/; @@ -19,7 +19,7 @@ =head2 read_tape - $self->read_tape; + my $byte = $self->read_tape; =cut @@ -33,8 +33,6 @@ } } -my @tape_bits; - sub read_tape { my $self = shift; if ( ! $self->tape ) { @@ -48,18 +46,28 @@ return -1; } - if ( ! @tape_bits ) { - my $byte = ord( substr($self->tape,$pos,1) ); - warn sprintf("tape pos %d = %02x\n", $pos, $byte); + my $byte = ord( substr($self->tape,$pos,1) ); + warn sprintf("tape pos %d = %02x\n", $pos, $byte) if $self->trace; - $pos++; - $self->tape_pos( $pos ); + $pos++; + $self->tape_pos( $pos ); - @tape_bits = split(//, unpack("B8",$byte) ); - } - my $bit = shift @tape_bits ? 0xff : 0x00; - warn "\t$bit\n"; - return $bit; + return $byte; +} + +=head2 write_tape + + $self->write_tape( $byte ); + +=cut + + +sub write_tape { + my ( $self, $byte ) = @_; + + $self->append_to_file( 'tape.dmp', chr($byte) ); + + return $byte; } =head2 load_tape @@ -81,5 +89,10 @@ return 1; } +=head1 SEE ALSO + +L + +=cut 1;