6 |
use Carp qw/confess/; |
use Carp qw/confess/; |
7 |
use File::Slurp; |
use File::Slurp; |
8 |
use Data::Dump qw/dump/; |
use Data::Dump qw/dump/; |
9 |
use M6502; |
use M6502; # import @mem $PC and friends |
10 |
use Screen qw/$white $black/; |
use Screen qw/$white $black/; |
11 |
|
|
12 |
use base qw(Class::Accessor VRac M6502 Screen Prefs Tape); |
use base qw(Class::Accessor VRac M6502 Screen Prefs Tape); |
135 |
|
|
136 |
# $self->load_tape( '../oraoigre/bdash.tap' ); |
# $self->load_tape( '../oraoigre/bdash.tap' ); |
137 |
|
|
138 |
$self->loop; |
$self->loop( sub { |
139 |
|
M6502::exec( $_[0] ); |
140 |
|
$self->render_vram; |
141 |
|
}); |
142 |
}; |
}; |
143 |
|
|
144 |
=head1 Helper functions |
=head1 Helper functions |
432 |
|
|
433 |
Render one frame of video ram |
Render one frame of video ram |
434 |
|
|
435 |
$self->render_vram( @video_memory ); |
$self->render_vram; |
436 |
|
|
437 |
=cut |
=cut |
438 |
|
|
456 |
sub render_vram { |
sub render_vram { |
457 |
my $self = shift; |
my $self = shift; |
458 |
|
|
|
confess "no data?" unless (@_); |
|
|
confess "screen size not 256*256/8 but ",($#_+1) unless (($#_+1) == (256*256/8)); |
|
|
|
|
459 |
return unless $self->booted; |
return unless $self->booted; |
460 |
|
|
461 |
my $pixels = pack("C*", map { $flip[$_] } @_); |
my $pixels = pack("C*", map { $flip[$_] } @mem[ 0x6000 .. 0x7fff ]); |
462 |
|
|
463 |
my $vram = SDL::Surface->new( |
my $vram = SDL::Surface->new( |
464 |
-width => 256, |
-width => 256, |