/[VRac]/M6502/Orao.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /M6502/Orao.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 49 by dpavlin, Tue Jul 31 10:52:06 2007 UTC revision 50 by dpavlin, Tue Jul 31 11:14:19 2007 UTC
# Line 241  sub hexdump { Line 241  sub hexdump {
241          );          );
242  }  }
243    
 =head2 prompt  
   
   $orao->prompt( $address, $last_command );  
   
 =cut  
   
 sub prompt {  
         my $self = shift;  
         $self->app->sync;  
         my $a = shift;  
         my $last = shift;  
         print STDERR $self->hexdump( $a ),  
                 $last ? "[$last] " : '',  
                 "> ";  
         my $in = <STDIN>;  
         chomp($in);  
         warn "## prompt got: $in\n" if $self->debug;  
         $in ||= $last;  
         $last = $in;  
         return split(/\s+/, $in) if $in;  
 }  
   
244  =head1 Memory management  =head1 Memory management
245    
246  Orao implements all I/O using mmap addresses. This was main reason why  Orao implements all I/O using mmap addresses. This was main reason why
# Line 323  sub write { Line 301  sub write {
301  Command-line debugging intrerface is implemented for communication with  Command-line debugging intrerface is implemented for communication with
302  emulated device  emulated device
303    
304  =head2 cli  =head2 prompt
305    
306    $orao->cli();    $orao->prompt( $address, $last_command );
307    
308  =cut  =cut
309    
310  my $last = 'r 1';  my $last = 'r 1';
311    
312    sub prompt {
313            my $self = shift;
314            $self->app->sync;
315            my $a = shift;
316            print STDERR $self->hexdump( $a ),
317                    $last ? "[$last] " : '',
318                    "> ";
319            my $in = <STDIN>;
320            chomp($in);
321            warn "## prompt got: $in\n" if $self->debug;
322            $in ||= $last;
323            $last = $in;
324            return split(/\s+/, $in) if $in;
325    }
326    
327    =head2 cli
328    
329      $orao->cli();
330    
331    =cut
332    
333  sub cli {  sub cli {
334          my $self = shift;          my $self = shift;
335          my $a = $PC || confess "no pc?";          my $a = $PC || confess "no pc?";
# Line 343  sub cli { Line 342  sub cli {
342                  if ( $c =~ m/^[qx]/i ) {                  if ( $c =~ m/^[qx]/i ) {
343                          exit;                          exit;
344                  } elsif ( $c eq '?' ) {                  } elsif ( $c eq '?' ) {
345                            my $t = $self->trace ? 'on' : 'off' ;
346                            my $d = $self->debug ? 'on' : 'off' ;
347                          warn <<__USAGE__;                          warn <<__USAGE__;
348  uage:  Usage:
349    
350  x|q\t\texit  x|q\t\texit
351  e 6000 6010\tdump memory, +/- to walk forward/backward  e 6000 6010\tdump memory, +/- to walk forward/backward
352  m 1000 ff 00\tput ff 00 on 1000  m 1000 ff 00\tput ff 00 on 1000
353  j|u 1000\t\tjump (change pc)  j|u 1000\t\tjump (change pc)
354  r 42\t\trun 42 instruction opcodes  r 42\t\trun 42 instruction opcodes
355  t\t\ttrace on/off  t\t\ttrace [$t]
356  d\t\tdebug on/off  d\t\tdebug [$d]
357    
358  __USAGE__  __USAGE__
359                            warn sprintf(" PC: %04x A:%02x P:%02x X:%02x Y:%02x S:%02x\n", $PC, $A, $P, $X, $Y, $S);
360                  } elsif ( $c =~ m/^e/i ) {                  } elsif ( $c =~ m/^e/i ) {
361                          $a = $v if defined($v);                          $a = $v if defined($v);
362                          my $to = shift @v;                          my $to = shift @v;
# Line 373  __USAGE__ Line 377  __USAGE__
377                          $a = $v;                          $a = $v;
378                          $self->poke_code( $a, @v );                          $self->poke_code( $a, @v );
379                          printf "poke %d bytes at %04x\n", $#v + 1, $a;                          printf "poke %d bytes at %04x\n", $#v + 1, $a;
380                            $last = '+';
381                  } elsif ( $c =~ m/^l/i ) {                  } elsif ( $c =~ m/^l/i ) {
382                          my $to = shift @v || 0x1000;                          my $to = shift @v || 0x1000;
383                          $a = $to;                          $a = $to;
384                          $self->load_oraoemu( $v, $a );                          $self->load_oraoemu( $v, $a );
385                            $last = '';
386                  } elsif ( $c =~ m/^s/i ) {                  } elsif ( $c =~ m/^s/i ) {
387                          $self->save_dump( $v || 'mem.dump', @v );                          $self->save_dump( $v || 'mem.dump', @v );
388                            $last = '';
389                  } elsif ( $c =~ m/^r/i ) {                  } elsif ( $c =~ m/^r/i ) {
390                          $run_for = $v || 1;                          $run_for = $v || 1;
391                          print "run_for $run_for instructions\n";                          print "run_for $run_for instructions\n";
# Line 388  __USAGE__ Line 395  __USAGE__
395                          printf "set pc to %04x\n", $to;                          printf "set pc to %04x\n", $to;
396                          $PC = $to;      # remember for restart                          $PC = $to;      # remember for restart
397                          $run_for = 1;                          $run_for = 1;
398                            $last = sprintf('m %04x', $to);
399                          last;                          last;
400                  } elsif ( $c =~ m/^t/ ) {                  } elsif ( $c =~ m/^t/ ) {
401                          $self->trace( not $self->trace );                          $self->trace( not $self->trace );

Legend:
Removed from v.49  
changed lines
  Added in v.50

  ViewVC Help
Powered by ViewVC 1.1.26