OSDN Git Service

Enable to track git://github.com/monaka/binutils.git
[pf3gnuchains/pf3gnuchains3x.git] / sid / component / testsuite / sidcomp.lcd / lcdbase.exp
diff --git a/sid/component/testsuite/sidcomp.lcd/lcdbase.exp b/sid/component/testsuite/sidcomp.lcd/lcdbase.exp
new file mode 100644 (file)
index 0000000..59553f7
--- /dev/null
@@ -0,0 +1,154 @@
+set test "sid configuration"
+sid_config_component_etc_test "base.conf" \
+    "load libhd44780u.la hd44780u_component_library" \
+    "hw-lcd-hd44780u-a02" \
+    "load liblcd-char-display.la lcd_char_display_component_library
+new hw-lcd-char-display display
+relate tester display display"
+pass $test
+
+# Initialisation.
+set LCD(IR) 0
+set LCD(AC) 0
+set LCD(DR) 1
+
+set test "sid startup"
+if [sid_start "base.conf"] then { pass $test } else { fail $test ; return }
+
+set test "acquire bus"
+set bus [sid_cmd "sid::component::find_bus $victim bus"]
+if {$bus == ""} { fail $test } else { pass $test }
+
+set display [sid_cmd "set relationships(display)"]
+
+set test "Save state"
+set state [sid_cmd "sid::component::attribute_value $victim state-snapshot"]
+if {$state != ""} then { pass $test } else { fail $test }
+
+foreach test_type { regular resstate } {
+set test "get display row-col pin"
+set row_col_pin [sid_cmd "sid::component::find_pin $display row-col"]
+if {$row_col_pin != ""} { pass $test } else { fail $test }
+sid_cmd "sid::component::connect_pin $victim row_col $row_col_pin"
+
+set test "correct AC value after DR write"
+# The 32 is in HEX, but somebody is not grok-ing the 0x prefix
+set result [sid_cmd "sid::bus::write_h4_l1 $bus $LCD(DR) 0x32"]
+if ![sid_bus_ok_p $result] {
+    fail $test
+} else {
+    set result [sid_cmd "sid::bus::read_h4_l1 $bus $LCD(AC)"]
+    if {[sid_bus_ok_p $result] && [lindex $result 1] == 1} {
+       pass $test
+    } else {
+       fail $test
+    }
+}
+
+set test "correct AC value after 2nd DR write"
+# The 23 is in HEX, but somebody is not grok-ing the 0x prefix
+set result [sid_cmd "sid::bus::write_h4_l1 $bus $LCD(DR) 0x23"]
+if ![sid_bus_ok_p $result] {
+    fail $test
+} else {
+    set result [sid_cmd "sid::bus::read_h4_l1 $bus $LCD(AC)"]
+    if {[sid_bus_ok_p $result] && [lindex $result 1] == 2} {
+       pass $test
+    } else {
+       fail $test
+    }
+}
+
+set test "DR read"
+sid_cmd "sid::bus::write_h4_l1 $bus $LCD(IR) 4"
+sid_cmd "sid::bus::read_h4_l1 $bus $LCD(DR)"
+set result [sid_cmd "sid::bus::read_h4_l1 $bus $LCD(DR)"]
+if {[sid_bus_ok_p $result] && [lindex $result 1] == 0x23} {
+    pass $test
+} else {
+    fail $test
+}
+
+
+set test "AC read"
+set result [sid_cmd "sid::bus::read_h4_l1 $bus $LCD(AC)"]
+if {[sid_bus_ok_p $result] && [lindex $result 1] == 0} {
+    pass $test
+} else {
+    fail $test
+}
+
+
+# FIXME: it seems like binding callback procedures to a certain pair
+# of pins in the LCD controller or the character display would make it
+# possible to verify that the right things are displayed.
+
+set test "display ``Hi Alex!''"
+set result [sid_cmd "sid::bus::write_h4_l1 $bus $LCD(IR) 0x80"]
+set okay 1
+
+foreach char [split "Hi Alex!" ""] {
+    scan $char %c code
+    set result [sid_cmd "sid::bus::write_h4_l1 $bus $LCD(DR) $code"]
+    if ![sid_bus_ok_p $result] {
+       set okay 0
+       break
+    }
+}
+
+set test "draw Cygnus logo"
+sid_cmd "sid::bus::write_h4_l1 $bus $LCD(IR) 0x43"
+
+set okay 1
+foreach byte {3 4 9 0xA 0xA 0xA 0xA 9 4 3 0 0 0 0 0 0 4 0x13 0xB 0 0 0xA 0x13 4 0x18} {
+    set result [sid_cmd "sid::bus::write_h4_l1 $bus $LCD(DR) $byte"]
+    if ![sid_bus_ok_p $result] {
+       set okay 0
+       break
+    }
+}
+sid_cmd "sid::bus::write_h4_l1 $bus $LCD(IR) 1"
+sid_cmd "sid::bus::write_h4_l1 $bus $LCD(IR) 0x80"
+sid_cmd "sid::bus::write_h4_l1 $bus $LCD(DR) 0"
+sid_cmd "sid::bus::write_h4_l1 $bus $LCD(DR) 2"
+if {$okay} { pass $test } else { fail $test }
+
+set test "display ``Cygnus rules''"
+set okay 1
+foreach char [split "Cygnus" ""] {
+    scan $char %c byte
+    set result [sid_cmd "sid::bus::write_h4_l1 $bus $LCD(DR) $code"]
+    if ![sid_bus_ok_p $result] {
+       set okay 0
+       break
+    }
+}
+
+sid_cmd "sid::bus::write_h4_l1 $bus $LCD(IR) 0xC0"
+sid_cmd "sid::bus::write_h4_l1 $bus $LCD(DR) 1"
+sid_cmd "sid::bus::write_h4_l1 $bus $LCD(DR) 3"
+
+foreach char [split "rules!" ""] {
+    scan $char %c byte
+    set result [sid_cmd "sid::bus::write_h4_l1 $bus $LCD(DR) $code"]
+    if ![sid_bus_ok_p $result] {
+       set okay 0
+       break
+    }
+}
+
+set res_testtype [string compare $test_type "regular"]
+if { $res_testtype == 0 } {
+  set test "Restore state"
+  set ok [sid_cmd "sid::component::set_attribute_value $victim state-snapshot [list $state]"]
+  if {$ok == "ok"} then { pass $test } else { fail $test }
+}
+}
+
+set test "sid stop"
+if [sid_stop] then { pass $test } else { fail $test ; return }
+
+
+# zap temp file if tests were successful 
+global exit_status
+if {$exit_status == "0"} then { file delete "base.conf" }