/[VRac]/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 /Orao.pm

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

revision 105 by dpavlin, Thu Aug 2 21:55:06 2007 UTC revision 109 by dpavlin, Fri Aug 3 10:29:33 2007 UTC
# Line 10  use File::Slurp; Line 10  use File::Slurp;
10  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
11  use M6502;  use M6502;
12    
13  use base qw(Class::Accessor M6502 Screen Prefs);  use base qw(Class::Accessor M6502 Screen Prefs Tape);
14  __PACKAGE__->mk_accessors(qw(booted));  __PACKAGE__->mk_accessors(qw(booted));
15    
16  =head1 NAME  =head1 NAME
# Line 63  sub boot { Line 63  sub boot {
63                  0x1000 => 'dump/SCRINV.BIN',                  0x1000 => 'dump/SCRINV.BIN',
64                  # should be 0x6000, but oraoemu has 2 byte prefix                  # should be 0x6000, but oraoemu has 2 byte prefix
65                  0x5FFE => 'dump/screen.dmp',                  0x5FFE => 'dump/screen.dmp',
66                  0xC000 => 'rom/BAS12.ROM',  #               0xC000 => 'rom/BAS12.ROM',
67                  0xE000 => 'rom/CRT12.ROM',  #               0xE000 => 'rom/CRT12.ROM',
68                    0xC000 => 'rom/BAS13.ROM',
69                    0xE000 => 'rom/CRT13.ROM',
70          });          });
71    
72  #       $PC = 0xDD11;   # BC  #       $PC = 0xDD11;   # BC
# Line 80  sub boot { Line 82  sub boot {
82          $self->trace( 0 );          $self->trace( 0 );
83          $self->debug( 0 );          $self->debug( 0 );
84    
85          $self->render( @mem[ 0x6000 .. 0x7fff ] );          warn "rendering video memory\n";
86            $self->render_vram( @mem[ 0x6000 .. 0x7fff ] );
87    
88          if ( $self->show_mem ) {          if ( $self->show_mem ) {
89    
# Line 99  sub boot { Line 102  sub boot {
102                          0xE000, 0xFFFF, 'sistemski ROM',                          0xE000, 0xFFFF, 'sistemski ROM',
103                  );                  );
104    
         } else {  
   
                 warn "rendering video memory\n";  
                 $self->render( @mem[ 0x6000 .. 0x7fff ] );  
           
105          }          }
106          $self->sync;          $self->sync;
107          $self->trace( $trace );          $self->trace( $trace );
# Line 132  Run interactive emulation loop Line 130  Run interactive emulation loop
130  sub run {  sub run {
131          my $self = shift;          my $self = shift;
132    
         $self->show_mem( 1 );  
   
133          $self->boot if ( ! $self->booted );          $self->boot if ( ! $self->booted );
134          $self->loop;          $self->loop;
135  };  };
# Line 176  sub _write_chunk { Line 172  sub _write_chunk {
172          $t = $end if ( $end < $t );          $t = $end if ( $end < $t );
173    
174          warn sprintf("refresh video ram %04x-%04x\n", $f, $t);          warn sprintf("refresh video ram %04x-%04x\n", $f, $t);
175  #       foreach my $a ( $f .. $t ) {          $self->render_vram( @mem[ 0x6000 .. 0x7fff ] );
 #               $self->vram( $a - 0x6000 , $mem[ $a ] );  
 #       }  
         $self->render( @mem[ 0x6000 .. 0x7fff ] );  
176          $self->render_mem( @mem ) if $self->show_mem;          $self->render_mem( @mem ) if $self->show_mem;
177  }  }
178    
# Line 450  sub read { Line 443  sub read {
443                  return $keyboard_none;                  return $keyboard_none;
444          }          }
445    
446            if ( $addr == 0x87ff ) {
447                    return $self->read_tape;
448            }
449    
450          $self->mmap_pixel( $addr, 0, $byte, 0 );          $self->mmap_pixel( $addr, 0, $byte, 0 );
451          return $byte;          return $byte;
452  }  }
# Line 467  sub write { Line 464  sub write {
464          my ($addr,$byte) = @_;          my ($addr,$byte) = @_;
465          warn sprintf("# Orao::write(%04x,%02x)\n", $addr, $byte) if $self->trace;          warn sprintf("# Orao::write(%04x,%02x)\n", $addr, $byte) if $self->trace;
466    
         if ( $addr >= 0x6000 && $addr < 0x8000 ) {  
                 $self->vram( $addr - 0x6000 , $byte );  
         }  
   
467          if ( $addr == 0x8800 ) {          if ( $addr == 0x8800 ) {
468                  warn sprintf "sound ignored: %x\n", $byte;                  warn sprintf "sound ignored: %x\n", $byte;
469          }          }
# Line 590  __USAGE__ Line 583  __USAGE__
583                          print "run_for $run_for instructions\n";                          print "run_for $run_for instructions\n";
584                          $show_R = 1;                          $show_R = 1;
585                          last;                          last;
586                  } elsif ( $c =~ m/^(u|j)/ ) {                  } elsif ( $c =~ m/^(u|j)/i ) {
587                          my $to = $v || $a;                          my $to = $v || $a;
588                          printf "set pc to %04x\n", $to;                          printf "set pc to %04x\n", $to;
589                          $PC = $to;      # remember for restart                          $PC = $to;      # remember for restart
# Line 598  __USAGE__ Line 591  __USAGE__
591                          $last = "r $run_for";                          $last = "r $run_for";
592                          $show_R = 1;                          $show_R = 1;
593                          last;                          last;
594                  } elsif ( $c =~ m/^t/ ) {                  } elsif ( $c =~ m/^tape/ ) {
595                            if ( ! $v ) {
596                                    warn "ERROR: please specify tape name!\n";
597                            } elsif ( ! -e $v ) {
598                                    warn "ERROR: tape $v: $!\n";
599                            } else {
600                                    $self->load_tape( $v );
601                            }
602                            $last = '';
603                    } elsif ( $c =~ m/^t/i ) {
604                          $self->trace( not $self->trace );                          $self->trace( not $self->trace );
605                          print "trace ", $self->trace ? 'on' : 'off', "\n";                          print "trace ", $self->trace ? 'on' : 'off', "\n";
606                          $last = '';                          $last = '';
607                  } elsif ( $c =~ m/^d/ ) {                  } elsif ( $c =~ m/^d/i ) {
608                          $self->debug( not $self->debug );                          $self->debug( not $self->debug );
609                          print "debug ", $self->debug ? 'on' : 'off', "\n";                          print "debug ", $self->debug ? 'on' : 'off', "\n";
610                          $last = '';                          $last = '';

Legend:
Removed from v.105  
changed lines
  Added in v.109

  ViewVC Help
Powered by ViewVC 1.1.26