--- Galaksija.pm 2007/09/29 12:07:12 178 +++ Galaksija.pm 2007/09/30 18:19:57 181 @@ -126,6 +126,11 @@ confess sprintf("can't find memory at address %04x",$addr) unless defined($byte); warn sprintf("# Galaksija::read(%04x) = %02x\n", $addr, $byte) if $self->trace; + if ( $addr >= 0x2000 && $addr <= 0x2036 ) { +# printf("## keyread 0x%04x = %02x\n", $addr, $byte); + $self->key_pressed( 1 ); # force process of events + } + $self->mmap_pixel( $addr, 0, $byte, 0 ) if $self->show_mem; return $byte; } @@ -162,22 +167,28 @@ 'left alt', 'backspace', 'scroll lock', 'left shift' ); -my $remap; +my $remap_key2addr; my $o = 1; foreach my $key ( @keymap ) { - $remap->{$key} = $o; + $remap_key2addr->{$key} = 0x2000 + $o; $o++; } +printf("keymap is mmaped 0x%04x - 0x%04x\n", 0x2000, $o); + =head2 key_down =cut sub key_down { my ( $self, $key ) = @_; - warn "registered key down: $key ", $remap->{$key}; - $self->write( 0x2000 + $remap->{$key}, 0xfe ); + if ( ! defined( $remap_key2addr->{$key} ) ) { + warn "unknown key pressed: $key [ignoring]\n"; + return; + } + printf("registered key down: $key address: %04x\n", $remap_key2addr->{$key} ); + $self->write( $remap_key2addr->{$key}, 0xfe ); } =head2 key_up @@ -186,8 +197,12 @@ sub key_up { my ( $self, $key ) = @_; - warn "registred key up: $key ", $remap->{$key}; - $self->write( 0x2000 + $remap->{$key}, 0xff ); + if ( ! defined( $remap_key2addr->{$key} ) ) { + warn "unknown key released: $key [ignoring]\n"; + return; + } + warn "registred key up: $key ", $remap_key2addr->{$key}; + $self->write( $remap_key2addr->{$key}, 0xff ); } =head2 render_vram @@ -214,7 +229,7 @@ $char2pos[ $char ] = ( $c & 0x7f ); } -warn dump( @char2pos ); +#warn "## chars2pos = ",dump( @char2pos ); sub render_vram { my $self = shift; @@ -252,7 +267,7 @@ # $self->render_vram_text; - printf("frame in %.2fs\n", time()-$t); + printf("frame in %.2fs\n", time()-$t) if $self->debug; }