1 set test "sid configuration"
2 sid_config_component_test "base.conf" \
3 "load [sid_find_file libmemory.la] mem_component_library" \
4 "hw-memory-ram/rom-basic"
9 if [sid_start "base.conf"] then { pass $test } else { fail $test ; return }
11 set test "attribute list"
12 sid_assert_includes_all "sid::component::attribute_names $victim" "size state-snapshot"
14 set test "set size = 512"
15 sid_assert_success "sid::component::set_attribute_value $victim size 0x200"
18 set robus [sid_cmd "sid::component::find_bus $victim read-only-port"]
19 set rwbus [sid_cmd "sid::component::find_bus $victim read-write-port"]
20 if {$robus == "" || $rwbus == ""} then { fail $test } else { pass $test }
22 set test "fill memory with junk bytes"
24 set size [sid_cmd "sid::component::attribute_value $victim size"]
25 for {set addr 0} {$addr < $size} {incr addr} {
26 # some pseudorandom sequence
27 set data [expr {(($data * 17) + 23) % 256}]
28 set result [sid_cmd "sid::bus::write_h4_l1 $rwbus $addr $data"]
29 if {$result != "ok"} then { fail $test ; break }
31 if {$addr == $size} then { pass $test } else { fail $test }
33 set test "read junk from memory via read-only port"
35 set size [sid_cmd "sid::component::attribute_value $victim size"]
36 for {set addr 0} {$addr < $size} {incr addr} {
37 # same pseudorandom sequence as above
38 set data [expr {(($data * 17) + 23) % 256}]
39 set result [sid_cmd "sid::bus::read_h4_l1 $robus $addr"]
40 set status [lindex $result 0]
41 if {$status != "ok"} then {fail "$test - bad" ; break }
42 set result_data [lindex $result 1]
43 if {$result_data != $data} then {fail "$test - mismatch @ $addr - $result_data vs $data" ; break}
45 if {$addr == $size} then { pass $test } else { fail $test }
47 set test "get memory state dump"
48 set state [sid_cmd "sid::component::attribute_value $victim state-snapshot"]
49 if {$state != ""} then { pass $test } else { fail $test }
51 set test "reset memory size"
52 sid_assert_success "sid::component::set_attribute_value $victim size 234000"
54 set test "spot check clear memory"
55 set result0 [sid_cmd "sid::bus::read_h4_l1 $rwbus 0x0"]
56 set result1 [sid_cmd "sid::bus::read_h4_l1 $rwbus 0x2F4D"]
57 set result2 [sid_cmd "sid::bus::read_h4_l1 $rwbus 0x39BA"]
58 if {$result0 != "ok 0" || $result1 != "ok 0" || $result2 != "ok 0"} then { fail $test } else { pass $test }
60 set test "set memory state dump"
61 #set t $timeout ; set timeout 30
62 set ok [sid_cmd "sid::component::set_attribute_value $victim state-snapshot [list $state]"]
64 if {$ok == "ok"} then { pass $test } else { fail $test }
66 set test "check memory size after restore"
67 set new_size [sid_cmd "sid::component::attribute_value $victim size"]
68 if {$size == $new_size} then { pass $test } else { fail $test }
70 set test "reread junk from memory after restore"
72 set size [sid_cmd "sid::component::attribute_value $victim size"]
73 for {set addr 0} {$addr < $size} {incr addr} {
74 # same pseudorandom sequence as above
75 set data [expr {(($data * 17) + 23) % 256}]
76 set result [sid_cmd "sid::bus::read_h4_l1 $robus $addr"]
77 set status [lindex $result 0]
78 if {$status != "ok"} then {fail "$test - bad" ; break}
79 set result_data [lindex $result 1]
80 if {$result_data != $data} then {fail "$test - mismatch @ $addr - $result_data vs $data" ; break}
82 if {$addr == $size} then { pass $test } else { fail $test }
84 set test "test for memory leaks"
86 for {set i 0} {$i < $iterations} {incr i} {
87 # some size between 1 .. 16 MB
88 set size [expr {1000000 + (($i * 101) % 16) * 1000000}]
89 sid_cmd "sid::component::set_attribute_value $victim size $size"
91 sid_assert_success "sid::component::set_attribute_value $victim size 0"
93 set test "resize memory for file test"
94 sid_assert_success "sid::component::set_attribute_value $victim size 7234"
96 set test "read memory image from a file"
97 set file [open "test.dat" "w"]
98 fconfigure $file -translation binary
100 set size [sid_cmd "sid::component::attribute_value $victim size"]
101 for {set i 0} {$i < $size} {incr i} {
102 set data [expr {(($data * 19) + 13) % 256}]
103 puts -nonewline $file [binary format "c" $data]
106 set res [sid_cmd "sid::component::set_attribute_value $victim image-file test.dat"]
107 set pin [sid_cmd "sid::component::find_pin $victim image-load"]
108 sid_cmd "sid::pin::driven_h4 $pin 0"
109 file delete -force $file
110 if {$res == "ok" && $pin != ""} then { pass $test } else { fail $test }
112 set test "verify read memory image"
114 set size [sid_cmd "sid::component::attribute_value $victim size"]
115 for {set i 0} {$i < $size} {incr i} {
116 set data [expr {(($data * 19) + 13) % 256}]
117 set result [sid_cmd "sid::bus::read_h4_l1 $robus $i"]
118 set status [lindex $result 0]
119 if {$status != "ok"} then {fail "$test - bad" ; break}
120 set result_data [lindex $result 1]
121 if {$result_data != $data} then {fail "$test - mismatch @ $i - $result_data vs $data" ; break}
123 if {$i == $size} then { pass $test } else { fail $test }
125 set test "make a big memory buffer"
127 sid_assert_success "sid::component::set_attribute_value $victim size $size"
129 set test "fill it sparsely"
132 for {set i 0} {$i < $sparse} {incr i} {
133 set data [expr {(($data * 19) + 13) % $size}]
135 set result [sid_cmd "sid::bus::write_h4_l1 $rwbus $addr 0xFE"]
136 if {$result != "ok"} then { fail $test ; break }
138 if {$i == $sparse} then { pass $test } else { fail $test }
140 set test "take sparse (RLE) snapshot"
141 set state [sid_cmd "sid::component::attribute_value $victim state-snapshot"]
142 if {[string length $state] < 10 || [string length $state] > 5000} then { fail $test } else { pass $test }
144 set test "clear memory"
145 set result [sid_cmd "sid::component::set_attribute_value $victim size 0"]
146 if {$result == "ok"} then { pass $test } else { fail $test }
148 set test "reload sparse (RLE) snapshot"
149 set result [sid_cmd "sid::component::set_attribute_value $victim state-snapshot [list $state]"]
150 if {$result == "ok"} then { pass $test } else { fail $test }
152 set test "load junk snapshot"
153 set result [sid_cmd "sid::component::set_attribute_value $victim state-snapshot bad-crap-bad-crap"]
154 if {$result == "bad_value"} then { pass $test } else { fail $test }
156 set test "save & restore large memory snapshot"
157 set o1 [sid_cmd "sid::component::set_attribute_value $victim size 800000"]
158 set state [sid_cmd "sid::component::attribute_value $victim state-snapshot"]
159 set o2 [sid_cmd "sid::component::set_attribute_value $victim state-snapshot [list $state]"]
160 if {$state != "" && $o1 == "ok" && $o2 == "ok"} then { pass $test } else { fail "$test - $o1 $o2" }
163 if [sid_stop] then { pass $test } else { fail $test ; return }
166 # zap temp file if tests were successful
168 if {$exit_status == "0"} then { file delete "base.conf" }