/[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

Diff of /M6502/t/05-M6502.t

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 199 by dpavlin, Sun Apr 13 11:40:01 2008 UTC revision 201 by dpavlin, Sun Apr 13 19:54:12 2008 UTC
# Line 6  use strict; Line 6  use strict;
6  use blib;  use blib;
7  use lib './lib';  use lib './lib';
8    
9  use Test::More tests => 168;  use Test::More tests => 191;
10  use Test::Exception;  use Test::Exception;
11  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
12    
# Line 65  foreach my $byte ( 0x00, 0x01, 0xff, 0xa Line 65  foreach my $byte ( 0x00, 0x01, 0xff, 0xa
65          cmp_ok( M6502::_read($a), '==', $byte, 'M6502::_read' );          cmp_ok( M6502::_read($a), '==', $byte, 'M6502::_read' );
66  }  }
67    
68    sub dump_callbacks {
69            my $out = 'callbacks:';
70            $out .= sprintf(" %02x", M6502::get_callback( $_ )) foreach ( 0x6000 .. 0x6020 );
71            diag join(' ',$out, @_);
72    }
73    
74    is( M6502::get_callback( 0x6000 ), 0x22, 'default callback 0x22' );
75    is( M6502::set_all_callbacks( 0x42 ), 0x42, 'set_all_callbacks( 0x42 )' );
76    is( M6502::get_callback( $_ ), 0x42, sprintf('get_callback %04x', $_) ) foreach ( 0, 1, 2, 3, 0x4000, 0x8000, 0xfffe, 0xffff );
77    is( M6502::set_all_callbacks( 0 ), 0, 'set_all_callbacks( 0 )' );
78    M6502::set_write_callback( 0x6000 );
79    is( M6502::get_callback( 0x6000 ), 0x20, 'set_write_callback' );
80    M6502::set_read_callback( 0x6000 );
81    is( M6502::get_callback( 0x6000 ), 0x22, 'set_read_callback' );
82    is( M6502::set_all_callbacks( 0xff ), 0xff, 'set_all_callbacks( 0xff )' );
83    is( M6502::get_callback( 0 ), 0xff, 'get_callback' );
84    ok( M6502::reset(), 'reset' );
85    is( M6502::get_callback( 0 ), 0x22, 'reset restore default callback 0x22' );
86    
87  my @flip_tests = (  my @flip_tests = (
88          { fill => 0b11101101, expect => 0b10110111, callbacks => 0x33 },          { fill => 0b11101101, expect => 0b10110111 },
89          { fill => 0b11101101, expect => 0b10110111, callbacks => 0x22 },          { fill => 0b11101101, expect => 0b10110111, callbacks => 0x22 },
90          { fill => 0b11110000, expect => 0b00001111, callbacks => 0x11 },          { fill => 0b11110000, expect => 0b00001111, callbacks => 0x11 },
91          { fill => 0b11110011, expect => 0b11001111, callbacks => 0x00 },          { fill => 0b11110011, expect => 0b11001111, callbacks => 0x00 },
92  );  );
93    
94    my $i = 1;
95    
96  foreach my $test ( @flip_tests ) {  foreach my $test ( @flip_tests ) {
97    
98          diag "test ",dump( $test );          diag 'flip round ',$i++,' ',dump( $test );
99    
100          ok( M6502::reset(), 'reset again' );          ok( M6502::reset(), 'reset again' );
101          is( M6502::set_all_callbacks( $test->{callbacks} ), $test->{callbacks}, 'set_all_callbacks' );          dump_callbacks;
102    
103            is( M6502::set_all_callbacks( $test->{callbacks} ), $test->{callbacks}, sprintf('set_all_callbacks(0x%02x)',$test->{callbacks}) )
104                    if $test->{callbacks};
105            dump_callbacks;
106    
107            # manually hook callbacks
108            M6502::set_write_callback( $_ ) foreach ( 0x6000 .. 0x6010 );
109            dump_callbacks('after set_write_callback');
110    
111          # flip bytes 6502 asm          # flip bytes 6502 asm
112          my $a = 0x1000;          my $a = 0x1000;
# Line 105  foreach my $test ( @flip_tests ) { Line 134  foreach my $test ( @flip_tests ) {
134          cmp_ok( $PC, '==', 0x1016, 'PC moved' );          cmp_ok( $PC, '==', 0x1016, 'PC moved' );
135    
136          foreach my $a ( 0x6000 .. 0x600c ) {          foreach my $a ( 0x6000 .. 0x600c ) {
137                  cmp_ok( $mem[$a], '==', $test->{expect}, sprintf('flipped %04x %08b -> %08b',$a, $test->{fill}, $mem[$a]) );                  cmp_ok( $mem[$a], '==', $test->{expect}, sprintf('flipped 1st %04x %08b -> %08b',$a, $test->{fill}, $mem[$a]) );
138                  cmp_ok( M6502::get_callback( $a ), '==', $test->{callbacks}, 'callback' );  #               cmp_ok( M6502::get_callback( $a ), '==', $test->{callbacks}, 'callback' );
139            }
140    
141            dump_callbacks;
142    
143            $PC = 0x1000;
144            ok( M6502::exec( 1001 ), 'M6502::exec again' );
145            cmp_ok( $PC, '==', 0x1016, 'PC moved' );
146    
147            foreach my $a ( 0x6000 .. 0x600c ) {
148                    is( $mem[$a], $test->{fill}, sprintf('flipped 2nd %04x %08b -> %08b',$a, $test->{fill}, $mem[$a]) );
149    #               is( M6502::get_callback( $a ), $test->{callbacks}, 'callback' );
150          }          }
151    
152            dump_callbacks;
153  }  }

Legend:
Removed from v.199  
changed lines
  Added in v.201

  ViewVC Help
Powered by ViewVC 1.1.26