/[gxemul]/trunk/src/cpus/cpu_i960.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/src/cpus/cpu_i960.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 14 by dpavlin, Mon Oct 8 16:18:51 2007 UTC revision 32 by dpavlin, Mon Oct 8 16:20:58 2007 UTC
# Line 1  Line 1 
1  /*  /*
2   *  Copyright (C) 2005  Anders Gavare.  All rights reserved.   *  Copyright (C) 2005-2006  Anders Gavare.  All rights reserved.
3   *   *
4   *  Redistribution and use in source and binary forms, with or without   *  Redistribution and use in source and binary forms, with or without
5   *  modification, are permitted provided that the following conditions are met:   *  modification, are permitted provided that the following conditions are met:
# Line 25  Line 25 
25   *  SUCH DAMAGE.   *  SUCH DAMAGE.
26   *   *
27   *   *
28   *  $Id: cpu_i960.c,v 1.2 2005/09/07 07:41:30 debug Exp $   *  $Id: cpu_i960.c,v 1.12 2006/09/19 10:50:08 debug Exp $
29   *   *
30   *  Intel i960 CPU emulation.   *  Intel i960 CPU emulation.
31   */   */
# Line 39  Line 39 
39  #include "machine.h"  #include "machine.h"
40  #include "memory.h"  #include "memory.h"
41  #include "misc.h"  #include "misc.h"
42    #include "settings.h"
43  #include "symbol.h"  #include "symbol.h"
44    
45  #define DYNTRANS_32  #define DYNTRANS_32
# Line 60  int i960_cpu_new(struct cpu *cpu, struct Line 61  int i960_cpu_new(struct cpu *cpu, struct
61          if (strcasecmp(cpu_type_name, "i960") != 0)          if (strcasecmp(cpu_type_name, "i960") != 0)
62                  return 0;                  return 0;
63    
64            cpu->run_instr = i960_run_instr;
65          cpu->memory_rw = i960_memory_rw;          cpu->memory_rw = i960_memory_rw;
66          cpu->update_translation_table = i960_update_translation_table;          cpu->update_translation_table = i960_update_translation_table;
67          cpu->invalidate_translation_caches_paddr =          cpu->invalidate_translation_caches =
68              i960_invalidate_translation_caches_paddr;              i960_invalidate_translation_caches;
69          cpu->invalidate_code_translation = i960_invalidate_code_translation;          cpu->invalidate_code_translation = i960_invalidate_code_translation;
70          cpu->is_32bit = 1;          cpu->is_32bit = 1;
71    
# Line 74  int i960_cpu_new(struct cpu *cpu, struct Line 76  int i960_cpu_new(struct cpu *cpu, struct
76                  debug("%s", cpu->name);                  debug("%s", cpu->name);
77          }          }
78    
79            /*  Add all register names to the settings:  */
80            CPU_SETTINGS_ADD_REGISTER64("pc", cpu->pc);
81    
82          return 1;          return 1;
83  }  }
84    
# Line 119  void i960_cpu_register_dump(struct cpu * Line 124  void i960_cpu_register_dump(struct cpu *
124                  symbol = get_symbol_name(&cpu->machine->symbol_context,                  symbol = get_symbol_name(&cpu->machine->symbol_context,
125                      cpu->pc, &offset);                      cpu->pc, &offset);
126    
127                  debug("cpu%i: pc  = 0x%08x", x, (int)cpu->pc);                  debug("cpu%i: pc  = 0x%08"PRIx32, x, (uint32_t)cpu->pc);
128                  debug("  <%s>\n", symbol != NULL? symbol : " no symbol ");                  debug("  <%s>\n", symbol != NULL? symbol : " no symbol ");
129          }          }
130  }  }
131    
132    
133  /*  /*
  *  i960_cpu_register_match():  
  */  
 void i960_cpu_register_match(struct machine *m, char *name,  
         int writeflag, uint64_t *valuep, int *match_register)  
 {  
         int cpunr = 0;  
   
         /*  CPU number:  */  
   
         /*  TODO  */  
   
         /*  Register name:  */  
         if (strcasecmp(name, "pc") == 0) {  
                 if (writeflag) {  
                         m->cpus[cpunr]->pc = *valuep;  
                 } else  
                         *valuep = m->cpus[cpunr]->pc;  
                 *match_register = 1;  
         }  
 }  
   
   
 /*  
  *  i960_cpu_show_full_statistics():  
  *  
  *  Show detailed statistics on opcode usage on each cpu.  
  */  
 void i960_cpu_show_full_statistics(struct machine *m)  
 {  
         fatal("i960_cpu_show_full_statistics(): TODO\n");  
 }  
   
   
 /*  
134   *  i960_cpu_tlbdump():   *  i960_cpu_tlbdump():
135   *   *
136   *  Called from the debugger to dump the TLB in a readable format.   *  Called from the debugger to dump the TLB in a readable format.
# Line 170  void i960_cpu_show_full_statistics(struc Line 141  void i960_cpu_show_full_statistics(struc
141   */   */
142  void i960_cpu_tlbdump(struct machine *m, int x, int rawflag)  void i960_cpu_tlbdump(struct machine *m, int x, int rawflag)
143  {  {
144          fatal("i960_cpu_tlbdump(): TODO\n");  }
145    
146    
147    /*
148     *  i960_cpu_gdb_stub():
149     *
150     *  Execute a "remote GDB" command. Returns a newly allocated response string
151     *  on success, NULL on failure.
152     */
153    char *i960_cpu_gdb_stub(struct cpu *cpu, char *cmd)
154    {
155            fatal("i960_cpu_gdb_stub(): TODO\n");
156            return NULL;
157  }  }
158    
159    
# Line 215  static void print_spaces(int len) { int Line 198  static void print_spaces(int len) { int
198   *  cpu->pc for relative addresses.   *  cpu->pc for relative addresses.
199   */   */
200  int i960_cpu_disassemble_instr(struct cpu *cpu, unsigned char *ib,  int i960_cpu_disassemble_instr(struct cpu *cpu, unsigned char *ib,
201          int running, uint64_t dumpaddr, int bintrans)          int running, uint64_t dumpaddr)
202  {  {
203          uint64_t offset;          uint64_t offset;
204          int len = 0;          int len = 0;

Legend:
Removed from v.14  
changed lines
  Added in v.32

  ViewVC Help
Powered by ViewVC 1.1.26