/[VRac]/M6502/M6502.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /M6502/M6502.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 30 - (hide annotations)
Mon Jul 30 17:56:13 2007 UTC (16 years, 9 months ago) by dpavlin
File size: 1548 byte(s)
make screen open
1 dpavlin 24 package M6502;
2    
3     use strict;
4     use warnings;
5    
6 dpavlin 27 use Data::Dump qw/dump/;
7 dpavlin 29 use Carp qw/confess/;
8 dpavlin 27
9 dpavlin 29 =head1 NAME
10 dpavlin 24
11 dpavlin 29 M6502 - perl bindings for 6502 emulator
12    
13     =cut
14    
15 dpavlin 27 my $debug = 1;
16 dpavlin 24
17 dpavlin 29 our $VERSION = qw(0.0.1);
18 dpavlin 27
19 dpavlin 29 our @mem = (0xff) x 0x10000; # 64M
20    
21 dpavlin 25 # program counter
22 dpavlin 24 our $PC = 0xbeef;
23 dpavlin 25 # CPU registars
24     our ( $A, $P, $X, $Y, $S ) = (0) x 5;
25     # Set IPeriod to number of CPU cycles between calls to Loop6502
26 dpavlin 27 our $IPeriod = 1;
27 dpavlin 24
28 dpavlin 26 =head1 init
29    
30     Called before C<Run6502>
31    
32     =cut
33    
34     sub init {
35     warn "inside init\n";
36     print "stdout\n";
37     };
38 dpavlin 27
39     =head2 read
40    
41     Read from memory
42    
43     $byte = read( $address );
44    
45     =cut
46    
47     sub read {
48     my ($addr) = @_;
49     my $byte = $mem[$addr];
50     warn "# read(",dump(@_),") = ",dump( $byte ),"\n" if $debug;
51     return $byte;
52     }
53    
54     =head2 write
55    
56     Write into emory
57    
58     write( $address, $byte );
59    
60     =cut
61    
62     sub write {
63     warn "# write(",dump(@_),")\n" if $debug;
64     my ($addr,$byte) = @_;
65     $mem[$addr] = $byte;
66     }
67 dpavlin 29
68     =head2 poke_code
69    
70     Write series of bytes into memory without passing through MMU
71    
72     $emu->poke_code( 0xbeef, 0xff, 0x00, 0xff, 0x00, 0xaa );
73    
74     =cut
75    
76     sub poke_code {
77     my $self = shift;
78     my $addr = shift;
79     warn sprintf("# poke_code(%04x,%s)\n", $addr, dump( @_ )) if $self->debug;
80     $mem[$addr++] = $_ foreach @_;
81     }
82    
83     =head2 ram
84    
85     Read searies of bytes from memory without passing through MMU
86    
87     $emu->ram( $from, $to );
88    
89     =cut
90    
91     sub ram {
92     my $self = shift;
93     my ($from,$to) = @_;
94     if ($from + $to) {
95 dpavlin 30 printf "ram %04x - %04x\n", $from, $to;
96 dpavlin 29 return $mem[$from .. $to - 1];
97     }
98 dpavlin 30 printf "ram %04x\n", $from;
99 dpavlin 29 return $mem[$from] if defined($from);
100     confess "no from address";
101     }
102    
103 dpavlin 24 1;

  ViewVC Help
Powered by ViewVC 1.1.26