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

Subversion Repositories or1k

[/] [or1k/] [tags/] [start/] [gdb-5.0/] [opcodes/] [w65-dis.c] - Diff between revs 579 and 1765

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 579 Rev 1765
/* Disassemble WDC 65816 instructions.
/* Disassemble WDC 65816 instructions.
   Copyright (C) 1995, 1998 Free Software Foundation, Inc.
   Copyright (C) 1995, 1998 Free Software Foundation, Inc.
 
 
This program is free software; you can redistribute it and/or modify
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
(at your option) any later version.
 
 
This program is distributed in the hope that it will be useful,
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
GNU General Public License for more details.
 
 
You should have received a copy of the GNU General Public License
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 
#include <stdio.h>
#include <stdio.h>
#define STATIC_TABLE
#define STATIC_TABLE
#define DEFINE_TABLE
#define DEFINE_TABLE
 
 
#include "w65-opc.h"
#include "w65-opc.h"
#include "dis-asm.h"
#include "dis-asm.h"
 
 
static   fprintf_ftype fpr;
static   fprintf_ftype fpr;
static   void *stream;
static   void *stream;
static   struct disassemble_info *local_info;
static   struct disassemble_info *local_info;
#if 0
#if 0
static char *lname[] =  {"r0","r1","r2","r3","r4","r5","r6","r7","s0"};
static char *lname[] =  {"r0","r1","r2","r3","r4","r5","r6","r7","s0"};
 
 
static char *findname (val)
static char *findname (val)
     unsigned int val;
     unsigned int val;
{
{
  if (val >= 0x10 && val <= 0x20)
  if (val >= 0x10 && val <= 0x20)
    return lname[(val - 0x10) / 2];
    return lname[(val - 0x10) / 2];
  return 0;
  return 0;
}
}
#endif
#endif
static void
static void
print_operand (lookup, format, args)
print_operand (lookup, format, args)
     int lookup;
     int lookup;
     char *format;
     char *format;
     unsigned     int *args;
     unsigned     int *args;
{
{
  int val;
  int val;
  int c;
  int c;
 
 
  while (*format)
  while (*format)
    {
    {
      switch ( c = *format++)
      switch ( c = *format++)
        {
        {
        case '$':
        case '$':
          val = args[(*format++) - '0'];
          val = args[(*format++) - '0'];
          if (lookup)
          if (lookup)
            {
            {
#if 0
#if 0
              name = findname(val);
              name = findname(val);
              if (name)
              if (name)
                fpr(stream, "%s", name);
                fpr(stream, "%s", name);
              else
              else
#endif
#endif
                local_info->print_address_func (val, local_info);
                local_info->print_address_func (val, local_info);
            }
            }
          else
          else
            fpr (stream, "0x%x", val);
            fpr (stream, "0x%x", val);
 
 
          break;
          break;
        default:
        default:
          fpr(stream,"%c", c);
          fpr(stream,"%c", c);
          break;
          break;
        }
        }
    }
    }
}
}
int
int
print_insn_w65(memaddr, info)
print_insn_w65(memaddr, info)
     bfd_vma memaddr;
     bfd_vma memaddr;
     struct disassemble_info *info;
     struct disassemble_info *info;
{
{
 
 
 
 
  int status = 0;
  int status = 0;
  unsigned char insn[4];
  unsigned char insn[4];
  register struct opinfo *op;
  register struct opinfo *op;
  int i;
  int i;
  int X =0;
  int X =0;
  int M = 0;
  int M = 0;
  int args[2];
  int args[2];
stream = info->stream;
stream = info->stream;
  fpr = info->fprintf_func;
  fpr = info->fprintf_func;
local_info =    info;
local_info =    info;
  for (i = 0; i <4 && status == 0; i++)
  for (i = 0; i <4 && status == 0; i++)
    {
    {
    status = info->read_memory_func(memaddr+i, insn + i, 1, info);
    status = info->read_memory_func(memaddr+i, insn + i, 1, info);
  }
  }
 
 
 
 
  for (op = optable; op->val != insn[0]; op++)
  for (op = optable; op->val != insn[0]; op++)
    ;
    ;
 
 
  fpr(stream,"%s", op->name);
  fpr(stream,"%s", op->name);
 
 
  /* Prepare all the posible operand values */
  /* Prepare all the posible operand values */
  {
  {
    int size = 1;
    int size = 1;
    int asR_W65_ABS8 = insn[1];
    int asR_W65_ABS8 = insn[1];
    int asR_W65_ABS16 = (insn[2] << 8) + asR_W65_ABS8;
    int asR_W65_ABS16 = (insn[2] << 8) + asR_W65_ABS8;
    int asR_W65_ABS24 = (insn[3] << 16) + asR_W65_ABS16;
    int asR_W65_ABS24 = (insn[3] << 16) + asR_W65_ABS16;
    int asR_W65_PCR8 = ((char)(asR_W65_ABS8)) + memaddr + 2;
    int asR_W65_PCR8 = ((char)(asR_W65_ABS8)) + memaddr + 2;
    int asR_W65_PCR16 = ((short)(asR_W65_ABS16)) + memaddr + 3;
    int asR_W65_PCR16 = ((short)(asR_W65_ABS16)) + memaddr + 3;
 
 
    switch (op->amode) {
    switch (op->amode) {
      DISASM();
      DISASM();
    }
    }
 
 
  return size;
  return size;
  }
  }
 
 
}
}
 
 

powered by: WebSVN 2.1.0

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