--- M6502/Screen.pm 2007/08/01 12:40:20 75 +++ M6502/Screen.pm 2007/08/01 12:57:15 76 @@ -57,6 +57,9 @@ my $green = SDL::Color->new( -r => 0x00, -g => 0xff, -b => 0x00 ); my $blue = SDL::Color->new( -r => 0x00, -g => 0x00, -b => 0xff ); +my $rect_screen = SDL::Rect->new( -x => 0, -y => 0, -width => 256, -height => 256 ); +my $rect_mem = SDL::Rect->new( -x => 256, -y => 0, -width => 256, -height => 256 ); + =head2 p $screen->p( $x, $y, 1 ); @@ -171,6 +174,8 @@ =head2 render +Render one frame of video ram + $self->render( @video_memory ); =cut @@ -193,7 +198,39 @@ $vram->display_format; my $rect = SDL::Rect->new( -x => 0, -y => 0, -width => 256, -height => 256 ); - $vram->blit( $rect, $app, $rect ); + $vram->blit( $rect, $app, $rect_screen ); + + $app->sync; +} + +=head2 render_mem + + $self->render_mem( @ram ); + +=cut + +sub render_mem { + my $self = shift; + + return unless $self->show_mem; + + my $pixels = pack("C*", @_); + + my $vram = SDL::Surface->new( + -width => 256, + -height => 256, + -depth => 8, # 1 bit per pixel + -pitch => 256, # bytes per line + -from => $pixels, + -Rmask => 0xffff00ff, + -Gmask => 0xffff00ff, + -Bmask => 0xffff00ff, + ); + + $vram->display_format; + + my $rect = SDL::Rect->new( -x => 0, -y => 0, -width => 256, -height => 256 ); + $vram->blit( $rect, $app, $rect_mem ); $app->sync; }