Diff for /np2/i386c/ia32/paging.c between versions 1.17 and 1.19

version 1.17, 2004/03/23 18:34:05 version 1.19, 2004/03/23 19:32:37
Line 291  cpu_memory_access_la_RMW(UINT32 laddr, U Line 291  cpu_memory_access_la_RMW(UINT32 laddr, U
                 break;                  break;
   
         case 1:          case 1:
                 value = cpu_memoryread(paddr[1]);                  value = cpu_memoryread(paddr[0]);
                 value += (UINT32)cpu_memoryread(paddr[1]) << 8;                  value += (UINT32)cpu_memoryread(paddr[1]) << 8;
                 if (length == 4) {                  if (length == 4) {
                         value += (UINT32)cpu_memoryread_w(paddr[1] + 1) << 16;                          value += (UINT32)cpu_memoryread_w(paddr[1] + 1) << 16;
Line 312  cpu_memory_access_la_RMW(UINT32 laddr, U Line 312  cpu_memory_access_la_RMW(UINT32 laddr, U
         return value;          return value;
 }  }
   
   
   #if defined(IA32_PAGING_EACHSIZE)
   UINT8 MEMCALL
   cpu_linear_memory_read_b(UINT32 laddr, const int crw, const int user_mode)
   {
           UINT32 addr;
   
           addr = paging(laddr, crw, user_mode);
           return(cpu_memoryread(addr));
   }
   
   UINT16 MEMCALL
   cpu_linear_memory_read_w(UINT32 laddr, const int crw, const int user_mode)
   {
           UINT32 addr;
           UINT32 addr2;
           UINT16 value;
   
           addr = paging(laddr, crw, user_mode);
           if ((laddr + 1) & 0x00000fff) {
                   return(cpu_memoryread_w(addr));
           }
           else {
                   addr2 = paging(laddr + 1, crw, user_mode);
                   value = cpu_memoryread_b(addr);
                   value += (UINT16)cpu_memoryread_b(addr2) << 8;
                   return(value);
           }
   }
   
   UINT32 MEMCALL
   cpu_linear_memory_read_d(UINT32 laddr, const int crw, const int user_mode)
   {
           UINT32 addr;
           UINT remain;
           UINT32 addr2;
           UINT32 value;
   
           addr = paging(laddr, crw, user_mode);
           remain = 0x1000 - (laddr & 0x00000fff);
           if (remain >= 4) {
                   return(cpu_memoryread_d(addr));
           }
           else {
                   addr2 = paging(laddr + remain, crw, user_mode);
                   switch (remain) {
                           case 3:
                                   value = cpu_memoryread(addr);
                                   value += (UINT32)cpu_memoryread_w(addr + 1) << 8;
                                   value += (UINT32)cpu_memoryread(addr2) << 24;
                                   break;
   
                           case 2:
                                   value = cpu_memoryread_w(addr);
                                   value += (UINT32)cpu_memoryread_w(addr2) << 16;
                                   break;
   
                           case 1:
                                   value = cpu_memoryread(addr);
                                   value += (UINT32)cpu_memoryread(addr2) << 8;
                                   value += (UINT32)cpu_memoryread_w(addr2 + 1) << 16;
                                   break;
   
                           default:
                                   ia32_panic("cpu_linear_memory_read_d(): out of range (remain = %d)\n", remain);
                                   value = 0;      /* compiler happy */
                                   break;
                   }
                   return value;
           }
   }
   
   void MEMCALL
   cpu_linear_memory_write_b(UINT32 laddr, UINT8 value, const int user_mode)
   {
           const int crw = (CPU_PAGE_WRITE|CPU_PAGE_DATA);
           UINT32 addr;
   
           addr = paging(laddr, crw, user_mode);
           cpu_memorywrite(addr, value);
   }
   
   void MEMCALL
   cpu_linear_memory_write_w(UINT32 laddr, UINT16 value, const int user_mode)
   {
           const int crw = (CPU_PAGE_WRITE|CPU_PAGE_DATA);
           UINT32 addr;
           UINT32 addr2;
   
           addr = paging(laddr, crw, user_mode);
           if ((laddr + 1) & 0x00000fff) {
                   cpu_memorywrite_w(addr, value);
           }
           else {
                   addr2 = paging(laddr + 1, crw, user_mode);
                   cpu_memorywrite(addr, (UINT8)value);
                   cpu_memorywrite(addr2, (UINT8)(value >> 8));
           }
   }
   
   void MEMCALL
   cpu_linear_memory_write_d(UINT32 laddr, UINT32 value, const int user_mode)
   {
           const int crw = (CPU_PAGE_WRITE|CPU_PAGE_DATA);
           UINT32 addr;
           UINT remain;
           UINT32 addr2;
   
           addr = paging(laddr, crw, user_mode);
           remain = 0x1000 - (laddr & 0x00000fff);
           if (remain >= 4) {
                   cpu_memorywrite_d(addr, value);
           }
           else {
                   addr2 = paging(laddr + remain, crw, user_mode);
                   switch (remain) {
                           case 3:
                                   cpu_memorywrite(addr, (UINT8)value);
                                   cpu_memorywrite_w(addr + 1, (UINT16)(value >> 8));
                                   cpu_memorywrite(addr2, (UINT8)(value >> 24));
                                   break;
   
                           case 2:
                                   cpu_memorywrite_w(addr, (UINT16)value);
                                   cpu_memorywrite_w(addr2, (UINT16)(value >> 16));
                                   break;
   
                           case 1:
                                   cpu_memorywrite(addr, (UINT8)value);
                                   cpu_memorywrite(addr2, (UINT8)(value >> 8));
                                   cpu_memorywrite_w(addr2 + 1, (UINT16)(value >> 16));
                                   break;
                   }
           }
   }
   #else   // IA32_PAGING_EACHSIZE
 UINT32 MEMCALL  UINT32 MEMCALL
 cpu_linear_memory_read(UINT32 laddr, UINT length, const int crw, const int user_mode)  cpu_linear_memory_read(UINT32 laddr, UINT length, const int crw, const int user_mode)
 {  {
Line 432  cpu_linear_memory_write(UINT32 laddr, UI Line 568  cpu_linear_memory_write(UINT32 laddr, UI
                 break;                  break;
         }          }
 }  }
   #endif  // IA32_PAGING_EACHSIZE
   
 void MEMCALL  void MEMCALL
 paging_check(UINT32 laddr, UINT length, const int crw, const int user_mode)  paging_check(UINT32 laddr, UINT length, const int crw, const int user_mode)

Removed from v.1.17  
changed lines
  Added in v.1.19


RetroPC.NET-CVS <cvs@retropc.net>