--- M6502/Orao.pm 2007/08/03 08:57:37 107 +++ M6502/Orao.pm 2007/08/03 10:29:33 109 @@ -10,7 +10,7 @@ use Data::Dump qw/dump/; use M6502; -use base qw(Class::Accessor M6502 Screen Prefs); +use base qw(Class::Accessor M6502 Screen Prefs Tape); __PACKAGE__->mk_accessors(qw(booted)); =head1 NAME @@ -443,6 +443,10 @@ return $keyboard_none; } + if ( $addr == 0x87ff ) { + return $self->read_tape; + } + $self->mmap_pixel( $addr, 0, $byte, 0 ); return $byte; } @@ -579,7 +583,7 @@ print "run_for $run_for instructions\n"; $show_R = 1; last; - } elsif ( $c =~ m/^(u|j)/ ) { + } elsif ( $c =~ m/^(u|j)/i ) { my $to = $v || $a; printf "set pc to %04x\n", $to; $PC = $to; # remember for restart @@ -587,11 +591,20 @@ $last = "r $run_for"; $show_R = 1; last; - } elsif ( $c =~ m/^t/ ) { + } elsif ( $c =~ m/^tape/ ) { + if ( ! $v ) { + warn "ERROR: please specify tape name!\n"; + } elsif ( ! -e $v ) { + warn "ERROR: tape $v: $!\n"; + } else { + $self->load_tape( $v ); + } + $last = ''; + } elsif ( $c =~ m/^t/i ) { $self->trace( not $self->trace ); print "trace ", $self->trace ? 'on' : 'off', "\n"; $last = ''; - } elsif ( $c =~ m/^d/ ) { + } elsif ( $c =~ m/^d/i ) { $self->debug( not $self->debug ); print "debug ", $self->debug ? 'on' : 'off', "\n"; $last = '';