12 |
|
|
13 |
use Carp qw/confess/; |
use Carp qw/confess/; |
14 |
use Data::Dump qw/dump/; |
use Data::Dump qw/dump/; |
15 |
|
use M6502 qw'@mem'; |
16 |
|
|
17 |
use base qw(Class::Accessor Prefs); |
use base qw(Class::Accessor Prefs); |
18 |
__PACKAGE__->mk_accessors(qw(app event)); |
__PACKAGE__->mk_accessors(qw(app event)); |
118 |
my $_vram_counter; |
my $_vram_counter; |
119 |
|
|
120 |
sub vram { |
sub vram { |
121 |
|
|
122 |
|
return; |
123 |
|
|
124 |
my ( $self, $offset, $byte ) = @_; |
my ( $self, $offset, $byte ) = @_; |
125 |
my $x = ( $offset % 32 ) << 3; |
my $x = ( $offset % 32 ) << 3; |
126 |
my $y = $offset >> 5; |
my $y = $offset >> 5; |
191 |
sub render { |
sub render { |
192 |
my $self = shift; |
my $self = shift; |
193 |
|
|
194 |
|
return unless $self->booted; |
195 |
|
|
196 |
die "this function isn't supported if scale isn't 1" unless $self->scale == 1; |
die "this function isn't supported if scale isn't 1" unless $self->scale == 1; |
197 |
|
|
198 |
|
confess "no data?" unless (@_); |
199 |
|
confess "screen size not 256*256/8 but ",($#_+1) unless (($#_+1) == (256*256/8)); |
200 |
|
|
201 |
my $pixels = pack("C*", @_); |
my $pixels = pack("C*", @_); |
202 |
|
|
203 |
my $vram = SDL::Surface->new( |
my $vram = SDL::Surface->new( |
327 |
while ( 1 ) { |
while ( 1 ) { |
328 |
$self->key_pressed( 1 ); |
$self->key_pressed( 1 ); |
329 |
M6502::exec($run_for); |
M6502::exec($run_for); |
330 |
|
$self->render( @mem[ 0x6000 .. 0x7fff ] ); |
331 |
} |
} |
332 |
} |
} |
333 |
|
|