--- M6502/Screen.pm 2007/08/02 17:15:07 101 +++ M6502/Screen.pm 2007/08/03 08:44:45 106 @@ -12,6 +12,7 @@ use Carp qw/confess/; use Data::Dump qw/dump/; +use M6502 qw'@mem'; use base qw(Class::Accessor Prefs); __PACKAGE__->mk_accessors(qw(app event)); @@ -117,6 +118,9 @@ my $_vram_counter; sub vram { + + return; + my ( $self, $offset, $byte ) = @_; my $x = ( $offset % 32 ) << 3; my $y = $offset >> 5; @@ -187,8 +191,13 @@ sub render { my $self = shift; + return unless $self->booted; + die "this function isn't supported if scale isn't 1" unless $self->scale == 1; + confess "no data?" unless (@_); + confess "screen size not 256*256/8 but ",($#_+1) unless (($#_+1) == (256*256/8)); + my $pixels = pack("C*", @_); my $vram = SDL::Surface->new( @@ -255,6 +264,15 @@ my $pending_key; my $run_for = 2000; +my $key_down; + +sub key_down { + my $self = shift; + my $key = shift; + warn "key_down($key) = ",$key_down->{$key}, "\n" if $self->debug; + return $key_down->{$key}; +} + sub key_pressed { my $self = shift; @@ -273,6 +291,7 @@ if ($type == SDL_KEYDOWN) { $k = $event->key_name(); + $key_down->{$k}++; if ( $k eq 'escape' ) { $run_for = $self->cli; warn "will check event loop every $run_for cycles\n"; @@ -283,6 +302,7 @@ } } elsif ( $type == SDL_KEYUP ) { my $up = $event->key_name(); + $key_down->{$up} = 0; warn "SDL_KEYUP ($type) = '$up'", $just_checking ? ' fake' : '', "\n"; undef $pending_key; } @@ -307,6 +327,7 @@ while ( 1 ) { $self->key_pressed( 1 ); M6502::exec($run_for); + $self->render( @mem[ 0x6000 .. 0x7fff ] ); } }