Switch the license of all files explicitly copyright the FSF
[external/binutils.git] / sim / m32c / mem.c
index d7623a4..edae7bf 100644 (file)
@@ -1,24 +1,22 @@
 /* mem.c --- memory for M32C simulator.
 
-Copyright (C) 2005 Free Software Foundation, Inc.
+Copyright (C) 2005, 2007 Free Software Foundation, Inc.
 Contributed by Red Hat, Inc.
 
 This file is part of the GNU simulators.
 
-The GNU simulators are free software; you can redistribute them and/or
-modify them under the terms of the GNU General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+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
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
 
-The GNU simulators are distributed in the hope that they will be
-useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with the GNU simulators; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301, USA  */
+along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
 #include <stdio.h>
@@ -202,6 +200,23 @@ mem_put_byte (int address, unsigned char value)
       }
       break;
 
+    case 0x3aa: /* uart1tx */
+      {
+       static int pending_exit = 0;
+       if (value == 0)
+         {
+           if (pending_exit)
+             {
+               step_result = M32C_MAKE_EXITED(value);
+               return;
+             }
+           pending_exit = 1;
+         }
+       else
+         putchar(value);
+      }
+      break;
+
     case 0x400:
       m32c_syscall (value);
       break;
@@ -232,6 +247,11 @@ mem_put_qi (int address, unsigned char value)
 void
 mem_put_hi (int address, unsigned short value)
 {
+  if (address == 0x402)
+    {
+      printf ("SimTrace: %06lx %04x\n", regs.r_pc, value);
+      return;
+    }
   S ("<=");
   mem_put_byte (address, value & 0xff);
   mem_put_byte (address + 1, value >> 8);
@@ -288,16 +308,16 @@ mem_get_byte (int address)
   address &= membus_mask;
   S ("=>");
   m = mem_ptr (address);
-  if (trace)
+  switch (address)
     {
-      if (tpr)
+    case 0x3ad: /* uart1c1 */
+      E();
+      return 2; /* transmitter empty */
+      break;
+    default: 
+      if (trace)
        printf (" %02x", *m);
-      else
-       {
-         S ("=>");
-         printf (" %02x", *m);
-         E ();
-       }
+      break;
     }
   E ();
   return *m;