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

Subversion Repositories or1k

[/] [or1k/] [tags/] [VER_5_3/] [gdb-5.3/] [opcodes/] [w65-dis.c] - Blame information for rev 1778

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
/* Disassemble WDC 65816 instructions.
2
   Copyright 1995, 1998, 2000, 2001 Free Software Foundation, Inc.
3
 
4
This program is free software; you can redistribute it and/or modify
5
it under the terms of the GNU General Public License as published by
6
the Free Software Foundation; either version 2 of the License, or
7
(at your option) any later version.
8
 
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
GNU General Public License for more details.
13
 
14
You should have received a copy of the GNU General Public License
15
along with this program; if not, write to the Free Software
16
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
17
 
18
#include <stdio.h>
19
#include "sysdep.h"
20
#define STATIC_TABLE
21
#define DEFINE_TABLE
22
 
23
#include "w65-opc.h"
24
#include "dis-asm.h"
25
 
26
static fprintf_ftype fpr;
27
static void *stream;
28
static struct disassemble_info *local_info;
29
 
30
static void print_operand PARAMS ((int, char *, unsigned int *));
31
 
32
#if 0
33
static char *lname[] = { "r0","r1","r2","r3","r4","r5","r6","r7","s0" };
34
 
35
static char *
36
findname (val)
37
     unsigned int val;
38
{
39
  if (val >= 0x10 && val <= 0x20)
40
    return lname[(val - 0x10) / 2];
41
  return 0;
42
}
43
#endif
44
static void
45
print_operand (lookup, format, args)
46
     int lookup;
47
     char *format;
48
     unsigned int *args;
49
{
50
  int val;
51
  int c;
52
 
53
  while (*format)
54
    {
55
      switch (c = *format++)
56
        {
57
        case '$':
58
          val = args[(*format++) - '0'];
59
          if (lookup)
60
            {
61
#if 0
62
              name = findname (val);
63
              if (name)
64
                fpr (stream, "%s", name);
65
              else
66
#endif
67
                local_info->print_address_func (val, local_info);
68
            }
69
          else
70
            fpr (stream, "0x%x", val);
71
 
72
          break;
73
        default:
74
          fpr (stream, "%c", c);
75
          break;
76
        }
77
    }
78
}
79
 
80
int
81
print_insn_w65 (memaddr, info)
82
     bfd_vma memaddr;
83
     struct disassemble_info *info;
84
{
85
  int status = 0;
86
  unsigned char insn[4];
87
  register struct opinfo *op;
88
  int i;
89
  int X = 0;
90
  int M = 0;
91
  int args[2];
92
  stream = info->stream;
93
  fpr = info->fprintf_func;
94
  local_info = info;
95
  for (i = 0; i < 4 && status == 0; i++)
96
    {
97
      status = info->read_memory_func (memaddr + i, insn + i, 1, info);
98
    }
99
 
100
  for (op = optable; op->val != insn[0]; op++)
101
    ;
102
 
103
  fpr (stream, "%s", op->name);
104
 
105
  /* Prepare all the posible operand values.  */
106
  {
107
    int size = 1;
108
    int asR_W65_ABS8 = insn[1];
109
    int asR_W65_ABS16 = (insn[2] << 8) + asR_W65_ABS8;
110
    int asR_W65_ABS24 = (insn[3] << 16) + asR_W65_ABS16;
111
    int asR_W65_PCR8 = ((char) (asR_W65_ABS8)) + memaddr + 2;
112
    int asR_W65_PCR16 = ((short) (asR_W65_ABS16)) + memaddr + 3;
113
 
114
    switch (op->amode)
115
      {
116
        DISASM ();
117
      }
118
 
119
    return size;
120
  }
121
}

powered by: WebSVN 2.1.0

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