--- M6502/M6502.pm 2007/07/30 21:53:04 35 +++ M6502/M6502.pm 2007/07/31 08:41:06 40 @@ -6,7 +6,7 @@ use Data::Dump qw/dump/; use Carp qw/confess/; use Exporter 'import'; -our @EXPORT = qw'@mem $PC $A $P $X $Y $S $IPeriod'; +our @EXPORT = qw'@mem $PC $A $P $X $Y $S $IPeriod $run_for'; =head1 NAME @@ -23,9 +23,12 @@ # program counter our $PC = 0xbeef; # CPU registars -our ( $A, $P, $X, $Y, $S ) = (0x42) x 5; +our ( $A, $P, $X, $Y, $S ) = (0) x 5; # Set IPeriod to number of CPU cycles between calls to Loop6502 our $IPeriod = 1; +# Exec6502 cycles +our $run_for = 1; +$run_for = 0x42; =head1 init @@ -116,4 +119,28 @@ confess "no from address"; } +=head2 push_R + +called by C to push changes in registars back to perl variables + +=cut + +sub push_R { + warn "push_R(",dump(@_),")\n"; + my ( $a, $p, $x, $y, $s, $pc ) = @_; + $PC = $pc; + $S=$s; $X=$x; $Y=$y; $P=$p; $A=$a; + dump_R(); +} + +=head2 dump_R + +helper function which dumps registers + +=cut + +sub dump_R { + warn sprintf("PC: %04x A:%02x P:%02x X:%02x Y:%02x S:%02x\n", $PC, $A, $P, $X, $Y, $S); +} + 1;