OpenCores
URL https://opencores.org/ocsvn/w11/w11/trunk

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.61/] [tools/] [tcl/] [rw11/] [asm.tcl] - Blame information for rev 26

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 25 wfjm
# $Id: asm.tcl 575 2014-07-27 20:55:41Z mueller $
2 20 wfjm
#
3 22 wfjm
# Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
4 20 wfjm
#
5
# This program is free software; you may redistribute and/or modify it under
6
# the terms of the GNU General Public License as published by the Free
7
# Software Foundation, either version 2, or at your option any later version.
8
#
9
# This program is distributed in the hope that it will be useful, but
10
# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
11
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12
# for complete details.
13
#
14
#  Revision History:
15
# Date         Rev Version  Comment
16 25 wfjm
# 2014-07-26   575   1.0.3  add asmwait_tout variable, use in asmwait
17
# 2014-07-10   568   1.0.2  add errcnt return for asmtreg and asmtmem
18 22 wfjm
# 2014-03-01   552   1.0.1  BUGFIX: asmwait checks now pc if stop: defined
19 20 wfjm
# 2013-04-26   510   1.0    Initial version (extracted from util.tcl)
20
#
21
 
22
package provide rw11 1.0
23
 
24
package require rlink
25
package require rwxxtpp
26
 
27
namespace eval rw11 {
28
 
29 25 wfjm
  variable asmwait_tout 10.
30
 
31 20 wfjm
  #
32
  # asmrun: run a program loaded with ldasm
33
  # 
34
  proc asmrun {cpu symName opts} {
35
    upvar 1 $symName sym
36
    array set defs {r0 0 r1 0 r2 0 r3 0 r4 0 r5 0}
37
    array set defs $opts
38
 
39
    if {![info exists defs(pc)]} {
40
      if {[info exists sym(start)]} {
41
        set defs(pc) $sym(start)
42
      } else {
43
        error "neither opts(pc) nor sym(start) given"
44
      }
45
    }
46
 
47
    if {![info exists defs(sp)]} {
48
      if {[info exists sym(stack)]} {
49
        set defs(sp) $sym(stack)
50
      } elseif {[info exists sym(start)]} {
51
        set defs(sp) $sym(start)
52
      } else {
53
        error "neither opts(sp) nor sym(stack) or sym(start) given"
54
      }
55
    }
56
 
57
    $cpu cp -wr0 $defs(r0) \
58
            -wr1 $defs(r1) \
59
            -wr2 $defs(r2) \
60
            -wr3 $defs(r3) \
61
            -wr4 $defs(r4) \
62
            -wr5 $defs(r5)
63
 
64
    $cpu cp -wsp $defs(sp) \
65
            -stapc $defs(pc)
66
 
67
    return ""
68
  }
69
 
70
  #
71
  # asmwait: wait for completion of a program loaded with ldasm
72
  # 
73 25 wfjm
  proc asmwait {cpu symName {tout 0.}} {
74 20 wfjm
    upvar 1 $symName sym
75 25 wfjm
    variable asmwait_tout
76
    if {$tout <= 0.} {          # if not specified
77
      set tout $asmwait_tout;   # use default value
78
    }
79 20 wfjm
    set dt [$cpu wtcpu -reset $tout]
80 22 wfjm
    if {$dt >= 0 && [info exists sym(stop)]} {
81 20 wfjm
      $cpu cp -rpc -edata $sym(stop)
82
    }
83
    return $dt
84
  }
85
 
86
  #
87
  # asmtreg: test registers after running a program loaded with ldasm
88
  # 
89
  proc asmtreg {cpu opts} {
90
    array set defs $opts
91
    set cpcmd ""
92
    foreach key [lsort [array names defs]] {
93
      append cpcmd " -r$key -edata $defs($key)"
94
    }
95 25 wfjm
    set errbeg [rlc errcnt]
96 20 wfjm
    eval $cpu cp $cpcmd
97 25 wfjm
    return [expr [rlc errcnt] - $errbeg]
98 20 wfjm
  }
99
 
100
  #
101
  # asmtmem: test memory after running a program loaded with ldasm
102
  # 
103
  proc asmtmem {cpu base list} {
104
    set nw [llength $list]
105
    if {$nw == 0} {
106
      error "asmtreg called with empty list"
107
    }
108 25 wfjm
    set errbeg [rlc errcnt]
109 20 wfjm
    $cpu cp -wal $base -brm $nw -edata $list
110 25 wfjm
    return [expr [rlc errcnt] - $errbeg]
111 20 wfjm
  }
112
 
113
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.