--- M6502/Orao.pm 2007/07/31 17:34:52 70 +++ M6502/Orao.pm 2007/08/01 12:57:15 76 @@ -51,11 +51,13 @@ $self->open_screen; $self->load_rom({ 0x1000 => 'dump/SCRINV.BIN', + # should be 0x6000, but oraoemu has 2 byte prefix + 0x5FFE => 'dump/screen.dmp', 0xC000 => 'rom/BAS12.ROM', 0xE000 => 'rom/CRT12.ROM', }); - $PC = 0xDD11; # BC +# $PC = 0xDD11; # BC # $PC = 0xC274; # MC $orao = $self; @@ -66,10 +68,14 @@ $self->trace( 0 ); $self->debug( 0 ); + $self->render( @mem[ 0x6000 .. 0x7fff ] ); + if ( $self->show_mem ) { warn "rendering memory map\n"; + $self->render_mem( @mem ); + my @mmap = ( 0x0000, 0x03FF, 'nulti blok', 0x0400, 0x5FFF, 'korisnički RAM (23K)', @@ -81,6 +87,7 @@ 0xE000, 0xFFFF, 'sistemski ROM', ); +if(0){ foreach my $i ( 0 .. $#mmap / 3 ) { my $o = $i * 3; my ( $from, $to, $desc ) = @mmap[$o,$o+1,$o+2]; @@ -94,13 +101,15 @@ } } } +} } else { warn "rendering video memory\n"; - for my $a ( 0x6000 .. 0x7fff ) { - $self->vram( $a - 0x6000, $mem[$a] ); - } +# for my $a ( 0x6000 .. 0x7fff ) { +# $self->vram( $a - 0x6000, $mem[$a] ); +# } + $self->render( @mem[ 0x6000 .. 0x7fff ] ); } $self->sync; @@ -152,9 +161,10 @@ $t = $end if ( $end < $t ); warn sprintf("refresh video ram %04x-%04x\n", $f, $t); - foreach my $a ( $f .. $t ) { - $self->vram( $a - 0x6000 , $mem[ $a ] ); - } +# foreach my $a ( $f .. $t ) { +# $self->vram( $a - 0x6000 , $mem[ $a ] ); +# } + $self->render( @mem[ 0x6000 .. 0x7fff ] ); } =head2 load_oraoemu @@ -248,7 +258,11 @@ return sprintf(" %04x %s\n", $a, join(" ", map { - sprintf( "%02x", $_ ) + if ( defined($_) ) { + sprintf( "%02x", $_ ) + } else { + ' ' + } } @mem[ $a .. $a+8 ] ) ); @@ -379,6 +393,7 @@ $a = $v if defined($v); my $to = shift @v; $to = $a + 32 if ( ! $to || $to <= $a ); + $to = 0xffff if ( $to > 0xffff ); my $lines = int( ($to - $a + 8) / 8 ); printf "## e %04x %04x (%d bytes) lines: %d\n", $a, $to, ($to-$a), $lines; while ( --$lines ) {