104 |
$self->trace( $trace ); |
$self->trace( $trace ); |
105 |
$self->debug( $debug ); |
$self->debug( $debug ); |
106 |
|
|
|
#( $A, $P, $X, $Y, $S, $IPeriod ) = ( 1, 2, 3, 4, 5, 6 ); |
|
|
|
|
107 |
warn "Orao boot finished", |
warn "Orao boot finished", |
108 |
$self->trace ? ' trace' : '', |
$self->trace ? ' trace' : '', |
109 |
$self->debug ? ' debug' : '', |
$self->debug ? ' debug' : '', |
115 |
|
|
116 |
$self->loop( sub { |
$self->loop( sub { |
117 |
my $run_for = shift; |
my $run_for = shift; |
118 |
# warn sprintf("about to exec from PC %04x for %d cycles\n", $PC, $run_for); |
warn sprintf("about to exec from PC %04x for %d cycles\n", $PC, $run_for) if $self->trace; |
119 |
M6502::exec( $run_for ); |
M6502::exec( $run_for ); |
120 |
$self->render_vram; |
$self->render_vram; |
121 |
}); |
}); |
149 |
|
|
150 |
warn sprintf("refresh video ram %04x-%04x\n", $f, $t); |
warn sprintf("refresh video ram %04x-%04x\n", $f, $t); |
151 |
$self->render_vram; |
$self->render_vram; |
152 |
$self->render_mem( @mem ) if $self->show_mem; |
$self->render_mem( @mem ); |
153 |
} |
} |
154 |
|
|
155 |
=head2 load_image |
=head2 load_image |
335 |
my $self = shift; |
my $self = shift; |
336 |
my ($addr) = @_; |
my ($addr) = @_; |
337 |
return if ( $addr > 0xffff ); |
return if ( $addr > 0xffff ); |
338 |
my $byte = @mem[$addr]; |
my $byte = $mem[$addr]; |
339 |
confess sprintf("can't find memory at address %04x",$addr) unless defined($byte); |
confess sprintf("can't find memory at address %04x",$addr) unless defined($byte); |
340 |
warn sprintf("# Orao::read(%04x) = %02x\n", $addr, $byte) if $self->trace; |
warn sprintf("# Orao::read(%04x) = %02x\n", $addr, $byte) if $self->trace; |
341 |
|
|
367 |
return $self->read_tape; |
return $self->read_tape; |
368 |
} |
} |
369 |
|
|
370 |
$self->mmap_pixel( $addr, 0, $byte, 0 ); |
$self->mmap_pixel( $addr, 0, $byte, 0 ) if $self->show_mem; |
371 |
return $byte; |
return $byte; |
372 |
} |
} |
373 |
|
|
392 |
confess sprintf "write access 0x%04x > 0xafff aborting\n", $addr; |
confess sprintf "write access 0x%04x > 0xafff aborting\n", $addr; |
393 |
} |
} |
394 |
|
|
395 |
$self->mmap_pixel( $addr, $byte, 0, 0 ); |
$self->mmap_pixel( $addr, $byte, 0, 0 ) if $self->show_mem; |
|
|
|
396 |
$mem[$addr] = $byte; |
$mem[$addr] = $byte; |
397 |
return; |
return; |
398 |
} |
} |