chiark / gitweb /
show debugp in debug section
[trains.git] / detpic / crashread
index 98841bc815a3be476efc8d1affc5af67fa91c2d6..ce7b86e1f3e9d5fc7303929eeb08170056500685 100755 (executable)
@@ -40,7 +40,7 @@ proc recv {n} {
        set c [read $p 1]
        binary scan $c c* d
        if {![llength $d]} { error "comms eof" }
-       lappend l $d
+       lappend l [expr {$d & 0x0ff}]
        incr n -1
     }
     return $l
@@ -61,12 +61,17 @@ proc selectslave_s {} {
     selectslave_slave $slave
 }
 
-proc xmit_s {b} {
+proc xmit_slave {slave b} {
     xmit "$b | 0x80"
-    selectslave_s
+    selectslave_slave $slave
     recv 1
 }
 
+proc xmit_s {b} {
+    global slave
+    xmit_slave $slave $b
+}
+
 proc pause {t} {
     global pause_var
     catch { unset pause_var }
@@ -148,7 +153,13 @@ proc thingnext {thing} {
 
 proc p {s} { puts -nonewline $s }
 
-proc ms_reset {arg} {
+proc reset_s {val min max} {
+    for {set slave $min} {$slave < $max} {incr slave} {
+       xmit_slave $slave $val
+    }
+}
+
+proc reset_m {arg} {
     if {[regexp {^(\d+)\.(\d+)} $arg min max]} {
     } elseif {[regexp {^(\d+)} $arg max]} {
        set min 1
@@ -156,11 +167,9 @@ proc ms_reset {arg} {
        error "--reset arg $arg wrong"
     }
     setup_m
-    xmit 0x89
-    for {set slave $min} {$slave < $max} {incr slave} {
-       selectslave_slave $slave
-       recv 1
-    }
+    reset_s 0x00 $min $max
+    reset_s 0x00 $min $max
+    reset_s 0x09 $min $max
     xmit 0x09
 }
 
@@ -194,7 +203,8 @@ fconfigure $p -blocking yes -buffering none \
 fconfigure stdout -buffering none
 
 if {![string compare reset $map]} {
-    ms_reset $picno
+    reset_m $slave
+    exit 0
 }
 
 set m [open $map]
@@ -239,6 +249,7 @@ while {[gets $m l] >= 0} {
            set sv symbolsbylockind($lockind)
        } else {
            set sv symbols
+           set smap($sym) $addr
        }
        lappend $sv [list $addr $sym]
     } elseif {$inblk==3} {
@@ -298,12 +309,13 @@ lappend sections {0x00000f00 {=SFRs=} 0}
 #lappend sections {0x00000f60 {==========SFRs,ACS===========} 0}
 
 lappend sections [list 0x1000 =END= 0]
-foreach tosort {sections symbols symbolsbylockind(program)} {
-    set $tosort [lsort [set $tosort]]
-}
-
-addendlast symbolsbylockind(program) 0x8000 (end)
 
+proc sortthings {} {
+    foreach tosort {sections symbols symbolsbylockind(program)} {
+       upvar #0 $tosort ts
+       set ts [lsort [set ts]]
+    }
+}
 set readcursor -1
 
 set ms [expr {
@@ -406,6 +418,18 @@ proc show {sym} {
     }
 }
 
+if {[info exists smap(misc:\ debugp)] && [info exists smap(misc:\ debug)]} {
+    set debugpval [readbytes $smap(misc:\ debugp) 1]
+#    puts y1-$debugpval
+#    puts y2-$smap(misc:\ debug)
+    set debugpaddr [format 0x%08x [expr {$debugpval+$smap(misc:\ debug)}]]
+#    puts y3-$debugpaddr
+    lappend symbols [list $debugpaddr [list "" (debugp)]]
+}
+
+sortthings
+addendlast symbolsbylockind(program) 0x8000 (end)
+
 set stkptr {panic: psave_stkptr}
 set stack {panic: panic_stack}