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

Contents of /M6502/t/05-M6502.t

Parent Directory Parent Directory | Revision Log Revision Log


Revision 92 - (show annotations)
Thu Aug 2 12:49:19 2007 UTC (16 years, 10 months ago) by dpavlin
File MIME type: application/x-troff
File size: 2255 byte(s)
and test 6502 assembly execution
1 #!/usr/bin/perl
2
3 use warnings;
4 use strict;
5
6 use blib;
7 use lib './lib';
8
9 use Test::More tests => 53;
10 use Test::Exception;
11 use Data::Dump qw/dump/;
12
13 BEGIN {
14 use_ok( 'M6502' );
15 }
16
17 cmp_ok( $debug, '==', 0, '$debug' );
18 cmp_ok( M6502::get_debug(), '==', 0, 'M6502::get_debug' );
19 cmp_ok( M6502->debug, '==', 0, 'M6502->debug' );
20
21 cmp_ok( M6502::set_debug( 1 ), '==', 1, 'M6502::set_debug');
22 cmp_ok( M6502::get_debug(), '==', 1, 'M6502::get_debug');
23 cmp_ok( $debug, '==', 0, '$debug still wrong');
24
25 cmp_ok( M6502->debug(1), '==', 1, 'M6502->debug(1)' );
26 cmp_ok( $debug, '==', 1, '$debug on' );
27 cmp_ok( M6502::get_debug(), '==', 1, 'get_debug on' );
28 cmp_ok( M6502->debug, '==', 1, 'M6502->debug on' );
29
30 cmp_ok( M6502->debug(0), '==', 0, 'M6502->debug(0)' );
31 cmp_ok( $debug, '==', 0, '$debug off' );
32 cmp_ok( M6502::get_debug(), '==', 0, 'get_debug off' );
33 cmp_ok( M6502->debug, '==', 0, 'M6502->debug off' );
34
35 M6502->debug( 1 ) if @ARGV;
36
37 diag "debug: $debug";
38
39 cmp_ok( $PC, '==', 0xbeef, 'PC' );
40
41 ok( M6502::reset(), 'reset' );
42
43 cmp_ok( $PC, '==', 0xffff, 'PC' );
44
45 diag dump_R();
46
47 $PC = 0xdead;
48
49 M6502::update_C_R();
50
51 $PC = 0xffff;
52
53 M6502::update_perl_R();
54
55 cmp_ok( $PC, '==', 0xdead, 'PC' );
56
57 ok( M6502::reset(), 'reset again' );
58
59 cmp_ok( $PC, '==', 0xffff, 'PC' );
60
61 foreach my $byte ( 0x00, 0x01, 0xff, 0xaa, 0x00 ) {
62 my $a = 0x1000 + $byte * 100;
63 cmp_ok( M6502::_write($a,$byte), '==', $byte, 'M6502::_write' );
64 cmp_ok( $mem[$a], '==', $byte, '$mem' );
65 cmp_ok( M6502::_read($a), '==', $byte, 'M6502::_read' );
66 }
67
68 $mem[$_] = 0b11101101 foreach ( 0x6000 .. 0x7ffff );
69
70 # flip bytes 6502 asm
71 my $a = 0x1000;
72
73 $mem[$a++] = $_ foreach (
74 0xa9, 0x60, 0xa2, 0x7f, 0xa0, 0x00, 0x85, 0xe1,
75 0x84, 0xe0, 0xb1, 0xe0, 0x4a, 0x26, 0xe2, 0x4a,
76 0x26, 0xe2, 0x4a, 0x26, 0xe2, 0x4a, 0x26, 0xe2,
77 0x4a, 0x26, 0xe2, 0x4a, 0x26, 0xe2, 0x4a, 0x26,
78 0xe2, 0x4a, 0x26, 0xe2, 0xa5, 0xe2, 0x91, 0xe0,
79 0xc8, 0xd0, 0xdf, 0xe6, 0xe1, 0xe4, 0xe1, 0xb0,
80 0xd9, 0x60, 0x00,
81 );
82
83 diag dump_R();
84 $PC = 0x1000;
85
86 ok( ! M6502::exec( 1 ), 'M6502::exec(1)' );
87 cmp_ok( $PC, '==', 0x1002, 'PC moved' );
88
89 ok( ! M6502::exec( 1000 ), 'M6502::exec' );
90 cmp_ok( $PC, '==', 0x1016, 'PC moved' );
91
92 foreach my $a ( 0x6000 .. 0x600c ) {
93 cmp_ok( $mem[$a], '==', 0b10110111, sprintf('flipped %04x',$a) );
94 }

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26