85 |
$self->debug( 0 ); |
$self->debug( 0 ); |
86 |
|
|
87 |
warn "rendering memory\n"; |
warn "rendering memory\n"; |
88 |
$self->render_mem( @mem ); |
$self->render_mem( M6502::mem_peek_region(0x0000,0xffff) ); |
89 |
|
|
90 |
if ( $self->show_mem ) { |
if ( $self->show_mem ) { |
91 |
|
|
119 |
|
|
120 |
# $self->load_tape( 'tapes/Orao/bdash.tap' ); |
# $self->load_tape( 'tapes/Orao/bdash.tap' ); |
121 |
# $self->load_tape( 'tapes/Orao/crtanje.tap' ); |
# $self->load_tape( 'tapes/Orao/crtanje.tap' ); |
122 |
$self->load_tape( 'tapes/Orao/jjack.tap' ); |
# $self->load_tape( 'tapes/Orao/jjack.tap', 0x168 ); |
123 |
|
$self->load_tape( 'tapes/Orao/muzika.tap', 0x168 ); |
124 |
|
|
125 |
$self->render_vram; |
$self->render_vram; |
126 |
|
|
128 |
my $run_for = shift; |
my $run_for = shift; |
129 |
warn sprintf("about to exec from PC %04x for %d cycles\n", $PC, $run_for) if $self->trace; |
warn sprintf("about to exec from PC %04x for %d cycles\n", $PC, $run_for) if $self->trace; |
130 |
M6502::exec( $run_for ); |
M6502::exec( $run_for ); |
131 |
# $self->render_vram; |
$self->render_vram; |
132 |
|
$self->render_mem( M6502::mem_peek_region(0x0000,0xffff) ) if $self->show_mem; |
133 |
}); |
}); |
134 |
}; |
}; |
135 |
|
|
379 |
return $self->read_tape; |
return $self->read_tape; |
380 |
} |
} |
381 |
|
|
382 |
$self->mmap_pixel( $addr, 0, $byte, 0 ) if $self->show_mem; |
# $self->mmap_pixel( $addr, 0, $byte, 0 ) if $self->show_mem; |
383 |
return $byte; |
return $byte; |
384 |
} |
} |
385 |
|
|
408 |
$self->render_vram if ( $addr >= 0x6000 && $addr <= 0x7fff ); |
$self->render_vram if ( $addr >= 0x6000 && $addr <= 0x7fff ); |
409 |
|
|
410 |
$self->mmap_pixel( $addr, $byte, 0, 0 ) if $self->show_mem; |
$self->mmap_pixel( $addr, $byte, 0, 0 ) if $self->show_mem; |
411 |
$mem[$addr] = $byte; |
# $mem[$addr] = $byte; |
412 |
return; |
return; |
413 |
} |
} |
414 |
|
|
425 |
sub render_vram { |
sub render_vram { |
426 |
my $self = shift; |
my $self = shift; |
427 |
|
|
428 |
my $pixels = pack("C*", map { $flip[$_] } @mem[ 0x6000 .. 0x7fff ]); |
# my $pixels = pack("C*", map { $flip[$_] } @mem[ 0x6000 .. 0x7fff ]); |
429 |
|
# my $pixels = pack("C*", map { $flip[$_] } $self->ram( 0x6000, 0x7fff )); |
430 |
|
# my $pixels = M6502::mem_peek_region( 0x6000, 0x7fff ); |
431 |
|
my $pixels = pack('C*', map { $flip[$_] } unpack('C*', M6502::mem_peek_region( 0x6000, 0x7fff ) ) ); |
432 |
|
|
433 |
my $vram = SDL::Surface->new( |
my $vram = SDL::Surface->new( |
434 |
-width => 256, |
-width => 256, |
440 |
$vram->set_colors( 0, $black, $white ); |
$vram->set_colors( 0, $black, $white ); |
441 |
|
|
442 |
$self->render_frame( $vram ); |
$self->render_frame( $vram ); |
|
|
|
|
print '.'; |
|
443 |
} |
} |
444 |
|
|
445 |
=head2 cpu_PC |
=head2 cpu_PC |
472 |
M6502::set_all_callbacks( 0x00 ); |
M6502::set_all_callbacks( 0x00 ); |
473 |
|
|
474 |
# video ram |
# video ram |
475 |
M6502::set_write_callback( $_ ) foreach ( 0x6000 .. 0x7fff ); |
# M6502::set_write_callback( $_ ) foreach ( 0x6000 .. 0x7fff ); |
476 |
# keyboard |
# keyboard |
477 |
M6502::set_read_callback( $_ ) foreach ( keys %$keyboard ); |
M6502::set_read_callback( $_ ) foreach ( keys %$keyboard ); |
478 |
# tape |
# tape |