| Index: embios/trunk/tools/libembios.py | 
| — | — | @@ -755,264 +755,146 @@ | 
| 756 | 756 | self.__myprint(" done\n, thread ID: 0x%x" % (struct.unpack("<I", response[4:8])), silent) | 
| 757 | 757 |  | 
| 758 | 758 |  | 
| 759 |  | -  def getprocinfo(self, offset, size, silent = 0):
 | 
|  | 759 | +  def getprocinfo(self, silent = 0): | 
| 760 | 760 | """ | 
| 761 | 761 | printout on console window: | 
| 762 | 762 | <silent> = 0: Process information struct version, Process information table size | 
| 763 | 763 | <silent> = 1: nothing | 
| 764 |  | -
 | 
| 765 |  | -      {'regs': [16I], 'cpsr': I, 'state': I, 'namepointer': I, 'cputime_current': I, 'cputime_total': Q, 'startusec': I,
 | 
| 766 |  | -      'queue_next_pointer': I, 'timeout': I, 'blocked_since': I, 'blocked_by_pointer': I, 'stackpointer': I, 'block_type': B, 'thread_type': B, 'priority': B, 'cpuload': B} 
 | 
| 767 | 764 | """ | 
| 768 |  | -    if (size > self.cin_maxsize - 0x10):
 | 
| 769 |  | -      raise Exception ("The data exceeds the maximum amount that can be received with this instruction.")
 | 
| 770 | 765 |  | 
|  | 766 | + | 
| 771 | 767 | self.__myprint("Retrieving process information...", silent) | 
| 772 | 768 |  | 
| 773 |  | -    self.handle.bulkWrite(self.__coutep, struct.pack("<IIII", 15, offset, size, 0))
 | 
| 774 |  | -    response = self.__getbulk(self.handle, self.__cinep, size + 0x10)
 | 
| 775 |  | -    self.__checkstatus(response)
 | 
|  | 769 | +    offset = 0 | 
|  | 770 | +    blocklen = size = self.cin_maxsize - 0x10 | 
|  | 771 | +    procinfo = "" | 
|  | 772 | +    structversion = 0 | 
|  | 773 | +    tablesize = 0 | 
| 776 | 774 |  | 
| 777 |  | -    out = []
 | 
| 778 |  | -    out[0] = struct.unpack("<I", response[4:8])[0]    # Process information struct version
 | 
| 779 |  | -    out[1] = struct.unpack("<I", response[8:12])[0]    # Process information table size
 | 
| 780 |  | -    out[2] = response     # raw received data
 | 
|  | 775 | +    # reading loop | 
|  | 776 | +    while (offset < size): | 
|  | 777 | +      self.handle.bulkWrite(self.__coutep, struct.pack("<IIII", 15, offset, size, 0)) | 
|  | 778 | +      response = self.__getbulk(self.handle, self.__cinep, size + 0x10) | 
|  | 779 | +      self.__checkstatus(response) | 
|  | 780 | + | 
|  | 781 | +      size = struct.unpack("<I", response[8:12])[0] | 
|  | 782 | + | 
|  | 783 | +      if size <= offset + blocklen: | 
|  | 784 | +        procinfo += response[0x10:0x10 + size] | 
|  | 785 | +        structversion = struct.unpack("<I", response[4:]) | 
|  | 786 | +        tablesize = struct.unpack("<I", response[8:]) | 
|  | 787 | +        break | 
|  | 788 | +      else: | 
|  | 789 | +        procinfo += response[0x10:0x10 + blocklen] | 
|  | 790 | + | 
|  | 791 | +      size -= blocklen | 
|  | 792 | +      offset += blocklen | 
|  | 793 | + | 
|  | 794 | +      blocklen = self.cin_maxsize - 0x10 | 
|  | 795 | +      if blocklen > size: | 
|  | 796 | +        blocklen = size | 
| 781 | 797 |  | 
| 782 |  | -    if (struct.unpack("<I", response[4:8])[0] == 1):   # Process information struct version == 1
 | 
| 783 |  | -      p = 0x10
 | 
| 784 |  | -      process_n = 3   # actually process 0, but there are alread three other elements in out
 | 
| 785 |  | -      while True:
 | 
| 786 |  | -      # regs ==================================================
 | 
| 787 |  | -        keylen = 16
 | 
| 788 |  | -        key_offset = 0
 | 
| 789 |  | -        
 | 
| 790 |  | -        while (offset > 0) and (key_offset < 0x10):
 | 
| 791 |  | -          offset -= 0x4
 | 
| 792 |  | -          out[process_n]['regs'][key_offset] = None
 | 
| 793 |  | -          key_offset += 1
 | 
| 794 |  | -        
 | 
| 795 |  | -        while (p+(keylen*0x4) - 0x10 > size) and (keylen > 0): keylen -= 1
 | 
| 796 |  | -        if (p+(keylen*0x4) - 0x10 > size): break
 | 
| 797 |  | -        
 | 
| 798 |  | -        while (key_offset < keylen):
 | 
| 799 |  | -          out[process_n]['regs'][key_offset] = struct.unpack("<I", response[p + (key_offset * 0x4) :])[0]
 | 
| 800 |  | -          key_offset += 1
 | 
| 801 |  | -       
 | 
| 802 |  | -        p += 16 * 0x4
 | 
| 803 |  | -        
 | 
| 804 |  | -      # cpsr ==================================================
 | 
| 805 |  | -        if (offset > 0):
 | 
| 806 |  | -          offset -= 4
 | 
| 807 |  | -          out[process_n]['cpsr'] = None
 | 
|  | 798 | + | 
|  | 799 | +    out = (structversion, tablesize, procinfotolist(procinfo, structversion)) | 
|  | 800 | + | 
|  | 801 | +    self.__myprint(" done\n\ | 
|  | 802 | +                    Process information struct version: 0x%08x\n\ | 
|  | 803 | +                    Total size of process information table: 0x%08x\n\ | 
|  | 804 | +                    %s\n\n" | 
|  | 805 | +                  % (out[0], out[1], procinfotostring(out[2], structversion)) | 
|  | 806 | +                  , silent) | 
|  | 807 | + | 
|  | 808 | +    return out | 
|  | 809 | + | 
|  | 810 | +    def procinfotolist(self, processinfo, structver): | 
|  | 811 | +      if (structver == 1):   # Process information struct version == 1 | 
|  | 812 | +        ptr = 0x10 | 
|  | 813 | +        process_n = 0 | 
|  | 814 | +        retval = [] | 
|  | 815 | +        while ptr < len(processinfo): | 
|  | 816 | +          retval.append({}) | 
| 808 | 817 |  | 
| 809 |  | -        if (p+0x4 - 0x10 > size): break
 | 
| 810 |  | -        
 | 
| 811 |  | -        out[process_n]['cpsr'] = struct.unpack("<I", response[p:])[0]
 | 
| 812 |  | -        
 | 
| 813 |  | -        p += 0x4
 | 
| 814 |  | -        
 | 
| 815 |  | -      # state =================================================
 | 
| 816 |  | -        if (offset > 0):
 | 
| 817 |  | -          offset -= 4
 | 
| 818 |  | -          out[process_n]['state'] = None
 | 
|  | 818 | +          retval[process_n]['regs'] = struct.unpack("<IIIIIIIIIIIIIIII", processinfo[ptr:]) | 
|  | 819 | +          ptr += 16 * 0x4 | 
|  | 820 | +          retval[process_n]['cpsr'] = struct.unpack("<I", processinfo[ptr:]) | 
|  | 821 | +          ptr += 1 * 0x4 | 
|  | 822 | +          retval[process_n]['state'] = struct.unpack("<I", processinfo[ptr:]) | 
|  | 823 | +          ptr += 1 * 0x4 | 
|  | 824 | +          retval[process_n]['name_ptr'] = struct.unpack("<I", processinfo[ptr:]) | 
|  | 825 | +          ptr += 1 * 0x4 | 
|  | 826 | +          retval[process_n]['cputime_current'] = struct.unpack("<I", processinfo[ptr:]) | 
|  | 827 | +          ptr += 1 * 0x4 | 
|  | 828 | +          retval[process_n]['cputime_total'] = struct.unpack("<Q", processinfo[ptr:]) | 
|  | 829 | +          ptr += 1 * 0x8 | 
|  | 830 | +          retval[process_n]['startusec'] = struct.unpack("<I", processinfo[ptr:]) | 
|  | 831 | +          ptr += 1 * 0x4 | 
|  | 832 | +          retval[process_n]['queue_next_ptr'] = struct.unpack("<I", processinfo[ptr:]) | 
|  | 833 | +          ptr += 1 * 0x4 | 
|  | 834 | +          retval[process_n]['timeout'] = struct.unpack("<I", processinfo[ptr:]) | 
|  | 835 | +          ptr += 1 * 0x4 | 
|  | 836 | +          retval[process_n]['blocked_since'] = struct.unpack("<I", processinfo[ptr:]) | 
|  | 837 | +          ptr += 1 * 0x4 | 
|  | 838 | +          retval[process_n]['blocked_by_ptr'] = struct.unpack("<I", processinfo[ptr:]) | 
|  | 839 | +          ptr += 1 * 0x4 | 
|  | 840 | +          retval[process_n]['stack_ptr'] = struct.unpack("<I", processinfo[ptr:]) | 
|  | 841 | +          ptr += 1 * 0x4 | 
|  | 842 | +          retval[process_n]['err_no'] = struct.unpack("<I", processinfo[ptr:]) | 
|  | 843 | +          ptr += 1 * 0x4 | 
|  | 844 | +          retval[process_n]['block_type'] = struct.unpack("<B", processinfo[ptr:]) | 
|  | 845 | +          ptr += 1 * 0x1 | 
|  | 846 | +          retval[process_n]['thread_type'] = struct.unpack("<B", processinfo[ptr:]) | 
|  | 847 | +          ptr += 1 * 0x1 | 
|  | 848 | +          retval[process_n]['priority'] = struct.unpack("<B", processinfo[ptr:]) | 
|  | 849 | +          ptr += 1 * 0x1 | 
|  | 850 | +          retval[process_n]['cpuload'] = struct.unpack("<B", processinfo[ptr:]) | 
|  | 851 | +          ptr += 1 * 0x1 | 
| 819 | 852 |  | 
| 820 |  | -        if (p+0x4 - 0x10 > size): break
 | 
| 821 |  | -        
 | 
| 822 |  | -        out[process_n]['state'] = struct.unpack("<I", response[p:])[0]
 | 
| 823 |  | -        
 | 
| 824 |  | -        p += 0x4
 | 
| 825 |  | -        
 | 
| 826 |  | -      # namepointer ===========================================
 | 
| 827 |  | -        if (offset > 0):
 | 
| 828 |  | -          offset -= 4
 | 
| 829 |  | -          out[process_n]['namepointer'] = None
 | 
|  | 853 | +          process_n += 1 | 
| 830 | 854 |  | 
| 831 |  | -        if (p+0x4 - 0x10 > size): break
 | 
| 832 |  | -        
 | 
| 833 |  | -        out[process_n]['namepointer'] = struct.unpack("<I", response[p:])[0]
 | 
| 834 |  | -        
 | 
| 835 |  | -        p += 0x4
 | 
| 836 |  | -        
 | 
| 837 |  | -      # cputime_current =======================================
 | 
| 838 |  | -        if (offset > 0):
 | 
| 839 |  | -          offset -= 4
 | 
| 840 |  | -          out[process_n]['cputime_current'] = None
 | 
|  | 855 | +        return retval | 
| 841 | 856 |  | 
| 842 |  | -        if (p+0x4 - 0x10 > size): break
 | 
| 843 |  | -        
 | 
| 844 |  | -        out[process_n]['cputime_current'] = struct.unpack("<I", response[p:])[0]
 | 
| 845 |  | -        
 | 
| 846 |  | -        p += 0x4
 | 
| 847 |  | -        
 | 
| 848 |  | -      # cputime_total =========================================
 | 
| 849 |  | -        if (offset > 0):
 | 
| 850 |  | -          offset -= 4
 | 
| 851 |  | -          out[process_n]['cputime_total'] = None
 | 
| 852 |  | -          
 | 
| 853 |  | -        if (p+0x4 - 0x10 > size): break
 | 
| 854 |  | -        
 | 
| 855 |  | -        out[process_n]['cputime_total'] = struct.unpack("<Q", response[p:])[0]
 | 
| 856 |  | -        
 | 
| 857 |  | -        p += 0x8
 | 
| 858 |  | -        
 | 
| 859 |  | -      # startusec =============================================
 | 
| 860 |  | -        if (offset > 0):
 | 
| 861 |  | -          offset -= 4
 | 
| 862 |  | -          out[process_n]['startusec'] = None
 | 
| 863 |  | -          
 | 
| 864 |  | -        if (p+0x4 - 0x10 > size): break
 | 
| 865 |  | -        
 | 
| 866 |  | -        out[process_n]['startusec'] = struct.unpack("<I", response[p:])[0]
 | 
| 867 |  | -        
 | 
| 868 |  | -        p += 0x4
 | 
| 869 |  | -        
 | 
| 870 |  | -      # queue_next_pointer ====================================
 | 
| 871 |  | -        if (offset > 0):
 | 
| 872 |  | -          offset -= 4
 | 
| 873 |  | -          out[process_n]['queue_next_pointer'] = None
 | 
| 874 |  | -          
 | 
| 875 |  | -        if (p+0x4 - 0x10 > size): break
 | 
| 876 |  | -        
 | 
| 877 |  | -        out[process_n]['queue_next_pointer'] = struct.unpack("<I", response[p:])[0]
 | 
| 878 |  | -        
 | 
| 879 |  | -        p += 0x4
 | 
| 880 |  | -        
 | 
| 881 |  | -      # timeout ===========================================
 | 
| 882 |  | -        if (offset > 0):
 | 
| 883 |  | -          offset -= 4
 | 
| 884 |  | -          out[process_n]['timeout'] = None
 | 
| 885 |  | -          
 | 
| 886 |  | -        if (p+0x4 - 0x10 > size): break
 | 
| 887 |  | -        
 | 
| 888 |  | -        out[process_n]['timeout'] = struct.unpack("<I", response[p:])[0]
 | 
| 889 |  | -        
 | 
| 890 |  | -        p += 0x4
 | 
| 891 |  | -        
 | 
| 892 |  | -      # blocked_since =========================================
 | 
| 893 |  | -        if (offset > 0):
 | 
| 894 |  | -          offset -= 4
 | 
| 895 |  | -          out[process_n]['blocked_since'] = None
 | 
| 896 |  | -          
 | 
| 897 |  | -        if (p+0x4 - 0x10 > size): break
 | 
| 898 |  | -        
 | 
| 899 |  | -        out[process_n]['blocked_since'] = struct.unpack("<I", response[p:])[0]
 | 
| 900 |  | -        
 | 
| 901 |  | -        p += 0x4
 | 
| 902 |  | -        
 | 
| 903 |  | -      # blocked_by_pointer ====================================
 | 
| 904 |  | -        if (offset > 0):
 | 
| 905 |  | -          offset -= 4
 | 
| 906 |  | -          out[process_n]['blocked_by_pointer'] = None
 | 
| 907 |  | -          
 | 
| 908 |  | -        if (p+0x4 - 0x10 > size): break
 | 
| 909 |  | -        
 | 
| 910 |  | -        out[process_n]['blocked_by_pointer'] = struct.unpack("<I", response[p:])[0]
 | 
| 911 |  | -        
 | 
| 912 |  | -        p += 0x4
 | 
| 913 |  | -        
 | 
| 914 |  | -      # stackpointer ==========================================
 | 
| 915 |  | -        if (offset > 0):
 | 
| 916 |  | -          offset -= 4
 | 
| 917 |  | -          out[process_n]['stackpointer'] = None
 | 
| 918 |  | -          
 | 
| 919 |  | -        if (p+0x4 - 0x10 > size): break
 | 
| 920 |  | -        
 | 
| 921 |  | -        out[process_n]['stackpointer'] = struct.unpack("<I", response[p:])[0]
 | 
| 922 |  | -        
 | 
| 923 |  | -        p += 0x4
 | 
| 924 |  | -        
 | 
| 925 |  | -      # block_type ============================================
 | 
| 926 |  | -        if (offset > 0):
 | 
| 927 |  | -          offset -= 1
 | 
| 928 |  | -          out[process_n]['block_type'] = None
 | 
| 929 |  | -          
 | 
| 930 |  | -        if (p+0x1 - 0x10 > size): break
 | 
| 931 |  | -        
 | 
| 932 |  | -        out[process_n]['block_type'] = struct.unpack("<B", response[p:])[0]
 | 
| 933 |  | -        
 | 
| 934 |  | -        p += 0x1
 | 
| 935 |  | -        
 | 
| 936 |  | -      # thread_type ===========================================
 | 
| 937 |  | -        if (offset > 0):
 | 
| 938 |  | -          offset -= 1
 | 
| 939 |  | -          out[process_n]['thread_type'] = None
 | 
| 940 |  | -          
 | 
| 941 |  | -        if (p+0x1 - 0x10 > size): break
 | 
| 942 |  | -        
 | 
| 943 |  | -        out[process_n]['thread_type'] = struct.unpack("<B", response[p:])[0]
 | 
| 944 |  | -        
 | 
| 945 |  | -        p += 0x1
 | 
| 946 |  | -        
 | 
| 947 |  | -      # priority ==============================================
 | 
| 948 |  | -        if (offset > 0):
 | 
| 949 |  | -          offset -= 1
 | 
| 950 |  | -          out[process_n]['priority'] = None
 | 
| 951 |  | -          
 | 
| 952 |  | -        if (p+0x1 - 0x10 > size): break
 | 
| 953 |  | -        
 | 
| 954 |  | -        out[process_n]['priority'] = struct.unpack("<B", response[p:])[0]
 | 
| 955 |  | -        
 | 
| 956 |  | -        p += 0x1
 | 
| 957 |  | -        
 | 
| 958 |  | -      # cpuload ===============================================
 | 
| 959 |  | -        if (offset > 0):
 | 
| 960 |  | -          offset -= 1
 | 
| 961 |  | -          out[process_n]['cpuload'] = None
 | 
| 962 |  | -          
 | 
| 963 |  | -        if (p+0x1 - 0x10 > size): break
 | 
| 964 |  | -        
 | 
| 965 |  | -        out[process_n]['cpuload'] = struct.unpack("<B", response[p:])[0]
 | 
| 966 |  | -        
 | 
| 967 |  | -        p += 0x1
 | 
| 968 |  | -        
 | 
| 969 |  | -      process_n += 1
 | 
| 970 |  | -        
 | 
| 971 |  | -    procinfoprint = ""
 | 
|  | 857 | + | 
| 972 | 858 |  | 
| 973 |  | -    try:
 | 
| 974 |  | -      i = 0
 | 
| 975 |  | -      while out[0] == 1 and not silent:      # Process information struct version == 1 && !silent
 | 
|  | 859 | +    def procinfotostring(self, procinfolist, structver): | 
|  | 860 | +      processinfoprint = "" | 
|  | 861 | +      ptr = 0 | 
|  | 862 | +      while structver == 1 and ptr < len(procinfolist):      # Process information struct version == 1 | 
| 976 | 863 | processinfoprint += "--------------------------------------------------------------------------------" | 
| 977 | 864 | processinfoprint += "R0: 0x%08x,  R1: 0x%08x,  R2: 0x%08x,  R3: 0x%08x,\n\ | 
| 978 | 865 | R4: 0x%08x,  R5: 0x%08x,  R6: 0x%08x,  R7: 0x%08x,\n\ | 
| 979 | 866 | R8: 0x%08x,  R9: 0x%08x,  R10: 0x%08x, R11: 0x%08x,\n\ | 
| 980 | 867 | R12: 0x%08x, R13: 0x%08x, LR: 0x%08x,  PC: 0x%08x\n" \ | 
| 981 |  | -                             % (out[i+3]['regs'][0], out[i+3]['regs'][1], out[i+3]['regs'][2], out[i+3]['regs'][3], \
 | 
| 982 |  | -                                out[i+3]['regs'][4], out[i+3]['regs'][5], out[i+3]['regs'][6], out[i+3]['regs'][7], \
 | 
| 983 |  | -                                out[i+3]['regs'][8], out[i+3]['regs'][9], out[i+3]['regs'][10], out[i+3]['regs'][11], \
 | 
| 984 |  | -                                out[i+3]['regs'][12], out[i+3]['regs'][13], out[i+3]['regs'][14], out[i+3]['regs'][15] )
 | 
| 985 |  | -        processinfoprint += "cpsr: 0b%032b      " % (out[i+3]['cpsr'])
 | 
| 986 |  | -        states = ["THREAD_FREE", "THREAD_SUSPENDED", "THREAD_READY", "THREAD_RUNNING", "THREAD_BLOCKED", "THREAD_DEFUNCT", "THREAD_DEFUNCT_ACK"]
 | 
| 987 |  | -        processinfoprint += "state: %s      " % (states[out[i+3]['state']])
 | 
| 988 |  | -        processinfoprint += "nameptr: 0x%08x\n" % (out[i+3]['namepointer'])
 | 
| 989 |  | -        processinfoprint += "current cpu time: 0x%08x      " % (out[i+3]['cputime_current'])
 | 
| 990 |  | -        processinfoprint += "total cpu time: 0x%016x\n" % (out[i+3]['cputime_total'])
 | 
| 991 |  | -        processinfoprint += "startusec: 0x%08x      " % (out[i+3]['startusec'])
 | 
| 992 |  | -        processinfoprint += "queue next ptr: 0x%08x\n" % (out[i+3]['queue_next_pointer'])
 | 
| 993 |  | -        processinfoprint += "timeout: 0x%08x\n" % (out[i+3]['timeout'])
 | 
| 994 |  | -        processinfoprint += "blocked since: 0x%08x      " % (out[i+3]['blocked_since'])
 | 
| 995 |  | -        processinfoprint += "blocked by ptr: 0x%08x\n" % (out[i+3]['blocked_by_pointer'])
 | 
| 996 |  | -        processinfoprint += "stackptr: 0x%08x      " % (out[i+3]['stackpointer'])
 | 
| 997 |  | -        blocktype = ["THREAD_NOT_BLOCKED", "THREAD_BLOCK_SLEEP", "THREAD_BLOCK_MUTEX", "THREAD_BLOCK_WAKEUP", "THREAD_DEFUNCT_STKOV", "THREAD_DEFUNCT_PANIC"]
 | 
| 998 |  | -        processinfoprint += "block type: %s\n" % (blocktype[out[i+3]['block_type']])
 | 
| 999 |  | -        threadtype = ["USER_THREAD", "SYSTEM_THREAD"]
 | 
| 1000 |  | -        processinfoprint += "thread type: %s\n" % (threadtype[out[i+3]['thread_type']])
 | 
| 1001 |  | -        processinfoprint += "priority: 0x%02x      " % (out[i+3]['priority'])
 | 
| 1002 |  | -        processinfoprint += "cpu load: 0x%02x\n" % (out[i+3]['cpuload'])
 | 
|  | 868 | +                             % (procinfolist[ptr]['regs'][0], procinfolist[ptr]['regs'][1], procinfolist[ptr]['regs'][2], procinfolist[ptr]['regs'][3], \ | 
|  | 869 | +                                procinfolist[ptr]['regs'][4], procinfolist[ptr]['regs'][5], procinfolist[ptr]['regs'][6], procinfolist[ptr]['regs'][7], \ | 
|  | 870 | +                                procinfolist[ptr]['regs'][8], procinfolist[ptr]['regs'][9], procinfolist[ptr]['regs'][10], procinfolist[ptr]['regs'][11], \ | 
|  | 871 | +                                procinfolist[ptr]['regs'][12], procinfolist[ptr]['regs'][13], procinfolist[ptr]['regs'][14], procinfolist[ptr]['regs'][15] ) | 
|  | 872 | +        processinfoprint += "cpsr: 0b%032b      " %             (procinfolist[ptr]['cpsr']) | 
|  | 873 | +        states = ("THREAD_FREE", "THREAD_SUSPENDED", "THREAD_READY", "THREAD_RUNNING", "THREAD_BLOCKED", "THREAD_DEFUNCT", "THREAD_DEFUNCT_ACK") | 
|  | 874 | +        processinfoprint += "state: %s      " %                 (states[procinfolist[ptr]['state']]) | 
|  | 875 | +        processinfoprint += "nameptr: 0x%08x\n" %               (procinfolist[ptr]['name_ptr']) | 
|  | 876 | +        processinfoprint += "current cpu time: 0x%08x      " %  (procinfolist[ptr]['cputime_current']) | 
|  | 877 | +        processinfoprint += "total cpu time: 0x%016x\n" %       (procinfolist[ptr]['cputime_total']) | 
|  | 878 | +        processinfoprint += "startusec: 0x%08x      " %         (procinfolist[ptr]['startusec']) | 
|  | 879 | +        processinfoprint += "queue next ptr: 0x%08x\n" %        (procinfolist[ptr]['queue_next_ptr']) | 
|  | 880 | +        processinfoprint += "timeout: 0x%08x\n" %               (procinfolist[ptr]['timeout']) | 
|  | 881 | +        processinfoprint += "blocked since: 0x%08x      " %     (procinfolist[ptr]['blocked_since']) | 
|  | 882 | +        processinfoprint += "blocked by ptr: 0x%08x\n" %        (procinfolist[ptr]['blocked_by_ptr']) | 
|  | 883 | +        processinfoprint += "err_no: 0x%08x      " %            (procinfolist[ptr]['err_no']) | 
|  | 884 | +        processinfoprint += "nameptr: 0x%08x\n" %               (procinfolist[ptr]['namepointer']) | 
|  | 885 | +        blocktype = ("THREAD_NOT_BLOCKED", "THREAD_BLOCK_SLEEP", "THREAD_BLOCK_MUTEX", "THREAD_BLOCK_WAKEUP", "THREAD_DEFUNCT_STKOV", "THREAD_DEFUNCT_PANIC") | 
|  | 886 | +        processinfoprint += "block type: %s\n" %                (blocktype[procinfolist[ptr]['block_type']]) | 
|  | 887 | +        threadtype = ("USER_THREAD", "SYSTEM_THREAD") | 
|  | 888 | +        processinfoprint += "thread type: %s\n" %               (threadtype[procinfolist[ptr]['thread_type']]) | 
|  | 889 | +        processinfoprint += "priority: 0x%02x      " %          (procinfolist[ptr]['priority']) | 
|  | 890 | +        processinfoprint += "cpu load: 0x%02x\n" %              (procinfolist[ptr]['cpuload']) | 
| 1003 | 891 |  | 
| 1004 |  | -        i += 1
 | 
| 1005 |  | -        
 | 
| 1006 |  | -    except IndexError:
 | 
|  | 892 | +        ptr += 1 | 
|  | 893 | + | 
| 1007 | 894 | processinfoprint += "--------------------------------------------------------------------------------" | 
|  | 895 | + | 
|  | 896 | +      return processinfoprint | 
| 1008 | 897 |  | 
| 1009 |  | -    self.__myprint(" done\n\
 | 
| 1010 |  | -                    Process information struct version: 0x%08x\n\
 | 
| 1011 |  | -                    Total size of process information table: 0x%08x\n\
 | 
| 1012 |  | -                    %s"
 | 
| 1013 |  | -                  % (out[0], out[1], procinfoprint)
 | 
| 1014 |  | -                  , silent)
 | 
| 1015 | 898 |  | 
| 1016 |  | -    return out
 | 
| 1017 | 899 |  | 
| 1018 | 900 |  | 
| 1019 | 901 | def execimage(self, offset, silent = 0): |