/[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 200 by dpavlin, Sun Apr 13 12:17:07 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 => 280;  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  sub dump_callbacks {  my $i = 1;
         my $out = 'callbacks:';  
         $out .= sprintf(" %02x", M6502::get_callback( $_ )) foreach ( 0x6000 .. 0x6020 );  
         diag $out;  
 }  
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' );
101          dump_callbacks;          dump_callbacks;
102    
103          ok( M6502::reset(), 'reset again' );          is( M6502::set_all_callbacks( $test->{callbacks} ), $test->{callbacks}, sprintf('set_all_callbacks(0x%02x)',$test->{callbacks}) )
104          is( M6502::set_all_callbacks( $test->{callbacks} ), $test->{callbacks}, 'set_all_callbacks' );                  if $test->{callbacks};
           
105          dump_callbacks;          dump_callbacks;
106    
107          # manually hook callbacks          # manually hook callbacks
108          if ( $test->{callbacks} == 0 ) {          M6502::set_write_callback( $_ ) foreach ( 0x6000 .. 0x6010 );
109                  M6502::set_write_callback( $_ ) foreach ( 0x6000 .. 0x6010 );          dump_callbacks('after set_write_callback');
         }  
   
         dump_callbacks;  
110    
111          # flip bytes 6502 asm          # flip bytes 6502 asm
112          my $a = 0x1000;          my $a = 0x1000;
# Line 122  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;          dump_callbacks;
# Line 133  foreach my $test ( @flip_tests ) { Line 145  foreach my $test ( @flip_tests ) {
145          cmp_ok( $PC, '==', 0x1016, 'PC moved' );          cmp_ok( $PC, '==', 0x1016, 'PC moved' );
146    
147          foreach my $a ( 0x6000 .. 0x600c ) {          foreach my $a ( 0x6000 .. 0x600c ) {
148                  cmp_ok( $mem[$a], '==', $test->{fill}, sprintf('flipped %04x %08b -> %08b',$a, $test->{fill}, $mem[$a]) );                  is( $mem[$a], $test->{fill}, sprintf('flipped 2nd %04x %08b -> %08b',$a, $test->{fill}, $mem[$a]) );
149                  cmp_ok( M6502::get_callback( $a ), '==', $test->{callbacks}, 'callback' );  #               is( M6502::get_callback( $a ), $test->{callbacks}, 'callback' );
150          }          }
151    
152          dump_callbacks;          dump_callbacks;

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

  ViewVC Help
Powered by ViewVC 1.1.26